Вызов 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. Итак, как мне сгенерировать эту подпись?


person Munchkin    schedule 25.01.2017    source источник
comment
Я не уверен, что понимаю ваш вопрос, но вам нужно написать код для создания подписи. Процесс описан во второй ссылке, которой вы поделились.   -  person Gaurav Mantri    schedule 25.01.2017
comment
Мой вопрос: как выглядит этот код? Может ли кто-нибудь привести пример?   -  person Munchkin    schedule 25.01.2017
comment
См. ответ в этом вопросе: stackoverflow.com/questions /41829911/azure-rest-api-put-blob. Взгляните на функцию AuthorizationHeader. Вам нужно будет написать что-то вроде этого только. ХТН.   -  person Gaurav Mantri    schedule 25.01.2017
comment
Я нашел это, что идет в правильном направлении. Но мой вопрос касается file и create вместо blob и list. Я не нашел никакой документации о том, как должен выглядеть синтаксис. Любые идеи?   -  person Munchkin    schedule 26.01.2017


Ответы (1)


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

#!/bin/sh

STORAGE_KEY="$1"
STORAGE_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="/$STORAGE_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 $STORAGE_ACCOUNT:$SIGN" \
  -H "Content-Length:0" \
  "https://$STORAGE_ACCOUNT.file.core.windows.net/$SHARE_NAME?restype=share"

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

#!/bin/sh

STORAGE_KEY="$1"
STORAGE_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="/$STORAGE_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 $STORAGE_ACCOUNT:$SIGN" \
  -H "Content-Length:0" \
  "https://$STORAGE_ACCOUNT.file.core.windows.net/$SHARE_NAME/$DIRECTORY_NAME?restype=directory"
person Aaron Chen    schedule 26.01.2017
comment
Потрясающий! Я вижу, что также не проблема создать каталог внутри этого общего ресурса: SHARENAME должен быть sth. например, <share>/<directory> и restype в строках 10 и 21 должны быть установлены на directory - person Munchkin; 26.01.2017