2017-01-25 10 views
1

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

#!/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 

documentation говорит, «Authorization» требуется (синтаксис: Authorization="[SharedKey|SharedKeyLite] <AccountName>:<Signature>") и "Signature" is a Hash-based Message Authentication Code (HMAC) constructed from the request and computed by using the SHA256 algorithm, and then encoded by using Base64 encoding. Так как же я могу генерировать эту подпись?

+0

Я не уверен, что я понимаю ваш вопрос, но вам нужно будет написать код для создания подписи. Этот процесс описан во 2-й ссылке, которую вы поделили. –

+0

Мой вопрос: как выглядит этот код? Может ли кто-нибудь привести пример? – Munchkin

+0

См. Ответ в этом вопросе: http://stackoverflow.com/questions/41829911/azure-rest-api-put-blob. Посмотрите на функцию AuthorizationHeader. Вам нужно будет написать что-то подобное. НТН. –

ответ

2

Попробуйте создать Делить с 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" 
+1

Удивительный! Я также вижу, что создать каталог внутри этого ресурса также не проблема: 'SHARENAME' должен быть sth. например '/' и 'restype' в строках 10 и 21 должны быть установлены в' directory' – Munchkin