【发布时间】:2020-05-06 12:43:57
【问题描述】:
我正在尝试实现一个用于创建 SAS 令牌的 Perl 函数。根据文档执行所有操作 (https://docs.microsoft.com/en-us/rest/api/storageservices/create-service-sas) 我总是收到错误“签名字段格式不正确”。
我的测试资源是“https://ribdkstoragepoc.blob.core.windows.net/project-poc/foo/koteyka.jpg”。我的代码填充的变量:
签名权限 = 'r'
已签名到期 = '2020-05-01T07:59:00Z'
canonicalizedresource = '/blob/ribdkstoragepoc/project-poc/foo/koteyka.jpg'
签名资源 = 'b'
签名版本 = '2018-03-28'
其他变量只是空行。我使用以下模式生成一个字符串:
我的 $stringToSign = $权限。 “\n”。 $开始。 “\n”。 $到期。 “\n”。 $canonicalizedResource 。 “\n”。 $标识符。 “\n”。 $IP 。 “\n”。 $协议。 “\n”。 $版本。 “\n”。 $资源。 “\n”。 $快照时间。 “\n”。 $rscc 。 “\n”。 $rscd 。 “\n”。 $rsce 。 “\n”。 $rscl 。 “\n”。 $rsct;
要签名的字符串:
r
2020-05-01T07:59:00Z
/blob/ribdkstoragepoc/project-poc/foo/koteyka.jpg
2018-03-28
b
计算签名:my $sig = Digest::SHA::hmac_sha256_base64($stringToSign, $key);
正如我已经说过的那样,这是行不通的。有谁知道可能出了什么问题?
【问题讨论】:
-
你能编辑你的问题并包含
stringToSign的值吗? -
感谢更新。你的
stringToSign在我看来还可以。您可以尝试将以下代码更改为:$sig = Digest::SHA::hmac_sha256_base64($stringToSign, $key);到$sig = Digest::SHA::hmac_sha256_base64($stringToSign, decode_base64($key));? -
@GauravMantri 已经完成了:$key 是 decode_base64( $key_b64) );