Я использую 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)
Любые выводы будут высоко оценены, спасибо!