Кодировка URL выдает ошибку аутентификации при использовании azure blob rest api - PullRequest
0 голосов
/ 22 апреля 2020

Я использую curl (внутри скрипта bash) для загрузки файла, используя PUT Blob в azure хранилище BLOB-объектов. Когда я URL-адрес кодирую путь, где я хочу, чтобы файл был сохранен как "https://${endpoint}/${container_name}/a/b/c/te%20st.txt" (оригинальное имя файла "te st.txt"), и я помещаю тот же путь в мою строку канонического ресурса, как "/${account_name}/${container_name}/a/b/c/te%20st.txt", я получаю " AuthenticationFailed "ошибка. Я использую «Авторизация: SharedKey $ {account_name}: $ {signature}»

Если я удаляю% (и удаляю все пробелы), он работает как шарм. Я попытался экранировать% char с% 2520, но он не работает.

Заголовок авторизации рассчитывается следующим образом:

canonicalized_headers="x-ms-blob-type:BlockBlob\nx-ms-date:${date}\nx-ms-version:2019-07-07\n"

canonicalized_resource="/${account_name}/${container}/${key}"

string_to_sign="PUT\n\n\n${content_length}\n\n${contentType}\n\n\n\n\n\n\n${canonicalized_headers}${canonicalized_resource}"

decoded_hex_key="$(echo "$azure_key" | openssl enc -base64 -d)"

signature=$(printf "$string_to_sign" | openssl dgst -sha256 -mac HMAC -macopt "key:$decoded_hex_key" -binary | openssl enc -base64)

curl -vvv -g -k --limit-rate "${rate_limit}" --proto-redir =https -X PUT -T "${file_name}" \
-H "x-ms-date: ${dateFormatted}" \
-H "${version}" \
-H "${blob_type}" \
-H "Content-Type: ${contentType}" \
-H "Authorization: SharedKey ${account_name}:${signature}" \
"https://${endpoint}/${container}/${key}"

Когда я ставлю% 20 вместо пробела в key Я получаю 403 Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature

Я использую blob_type = x-ms-blob-type: BlockBlob version = x-ms-version: 2018-03-28 (также пробовал версию 2019-07-07)

Любые выводы будут высоко оценены, спасибо!

...