0

我正在使用 curl(内部 bash 脚本)使用PUT Blob将文件上传到 azure blob 存储。当我对要存储文件的路径进行 URL 编码时"https://${endpoint}/${container_name}/a/b/c/te%20st.txt"(原始文件名是“test.txt”)并将相同的路径放在我的规范资源字符串中,例如"/${account_name}/${container_name}/a/b/c/te%20st.txt",我收到“AuthenticationFailed”错误。我正在使用“授权:SharedKey ${account_name}:${signature}”

如果我删除 % (并删除任何空格),它就像一个魅力。我尝试使用 %2520 转义 % char 但不起作用。

授权头计算如下:

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 版本)

任何线索将不胜感激,谢谢!

4

0 回答 0