Вызов API службы хранения

Я пытаюсь создать общий файловый ресурс в существующей учетной записи хранения Azure с помощью сценария bash. У меня есть только имя учетной записи и ключ, но я не хочу использовать учетные данные для входа. Это то, что я до сих пор:

#!/bin/sh

DATE_ISO=$(date +"%Y-%m-%dT%H:%M:%S")
VERSION="2015-02-21"  

curl --header "x-ms-version: ${VERSION}" --header "x-ms-date: ${DATE_ISO}" --header "Authorization: SharedKey mystorageaccount:?????" https://mystorageaccount.file.core.windows.net/myshare?restype=share

В документации сказано: "Авторизация" обязательна (синтаксис: Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>") и "Подпись" - это код аутентификации сообщений (HMAC), основанный на хэше, который создается из запроса и вычисляется с использованием алгоритма SHA256, а затем кодируется с использованием кодировки Base64. Так как мне создать эту подпись?

1 ответ

Решение

Попробуйте это, чтобы создать Share with bash скрипт.

#!/bin/sh

STORAGE_KEY="$1"
STORAE_ACCOUNT="$2"
SHARE_NAME="$3"

DATE_ISO=$(TZ=GMT date "+%a, %d %h %Y %H:%M:%S %Z")
VERSION="2015-12-11"
HEADER_RESOURCE="x-ms-date:$DATE_ISO\nx-ms-version:$VERSION"
URL_RESOURCE="/$STORAE_ACCOUNT/$SHARE_NAME\nrestype:share"
STRING_TO_SIGN="PUT\n\n\n\n\n\n\n\n\n\n\n\n$HEADER_RESOURCE\n$URL_RESOURCE"

DECODED_KEY="$(echo -n $STORAGE_KEY | base64 -d -w0 | xxd -p -c256)"
SIGN=$(printf "$STRING_TO_SIGN" | openssl dgst -sha256 -mac HMAC -macopt "hexkey:$DECODED_KEY" -binary |  base64 -w0)

curl -X PUT \
  -H "x-ms-date:$DATE_ISO" \
  -H "x-ms-version:$VERSION" \
  -H "Authorization: SharedKey $STORAE_ACCOUNT:$SIGN" \
  -H "Content-Length:0" \
  "https://$STORAE_ACCOUNT.file.core.windows.net/$SHARE_NAME?restype=share"

Попробуйте создать каталог под указанным общим ресурсом.

#!/bin/sh

STORAGE_KEY="$1"
STORAE_ACCOUNT="$2"
SHARE_NAME="$3"
DIRECTORY_NAME="$4"

DATE_ISO=$(TZ=GMT date "+%a, %d %h %Y %H:%M:%S %Z")
VERSION="2015-12-11"
HEADER_RESOURCE="x-ms-date:$DATE_ISO\nx-ms-version:$VERSION"
URL_RESOURCE="/$STORAE_ACCOUNT/$SHARE_NAME/$DIRECTORY_NAME\nrestype:directory"
STRING_TO_SIGN="PUT\n\n\n\n\n\n\n\n\n\n\n\n$HEADER_RESOURCE\n$URL_RESOURCE"

DECODED_KEY="$(echo -n $STORAGE_KEY | base64 -d -w0 | xxd -p -c256)"
SIGN=$(printf "$STRING_TO_SIGN" | openssl dgst -sha256 -mac HMAC -macopt "hexkey:$DECODED_KEY" -binary |  base64 -w0)

curl -X PUT \
  -H "x-ms-date:$DATE_ISO" \
  -H "x-ms-version:$VERSION" \
  -H "Authorization: SharedKey $STORAE_ACCOUNT:$SIGN" \
  -H "Content-Length:0" \
  "https://$STORAE_ACCOUNT.file.core.windows.net/$SHARE_NAME/$DIRECTORY_NAME?restype=directory"
Другие вопросы по тегам