我正在尝试实现一个Perl函数来创建SAS令牌。根据文档(https://learn.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‘
规范化资源= '/blob/ribdkstoragepoc/project-poc/foo/koteyka.jpg‘
符号资源= 'b‘
签名= '2018-03-28‘
其他变量只是空行。我使用以下模式生成一个字符串:
my $stringToSign = $permissions"\n“。$start。"\n“。$expiry。"\n“。$canonicalizedResource。"\n“。$identifier。"\n“。$IP。"\n“。$protocol。"\n“。$version。"\n“。$resource。"\n“。$snapshotTime。"\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 =$sig $key);
正如我已经说过的那样,这是行不通的。有人有什么想法吗?
发布于 2020-01-20 15:52:47
找出你的密码出了什么问题。基本上,您使用的是Storage的2018-03-28版本,因此不需要在$stringToSign中包含$resource和$snapshotTime。
此外,您还需要使用1-4 = (参考文献:https://github.com/smarx/waz-storage-perl/blob/master/WindowsAzure/Storage.pm#L42)来填充您的签名。
基于这些,下面是代码:
use strict;
use warnings;
use Digest::SHA qw(hmac_sha256_base64);
use MIME::Base64;
my $permissions = 'r';
my $start = '';
my $expiry = '2020-01-31T00:00:00Z';
my $canonicalizedResource = '/blob/ribdkstoragepoc/project-poc/foo/koteyka.jpg';
my $identifier = '';
#my $resource = 'b';
my $IP = '';
my $version = '2018-03-28';
my $protocol = '';
#my $snapshotTime = '';
my $rscc = '';
my $rscd = '';
my $rsce = '';
my $rscl = '';
my $rsct = '';
my $stringToSign = $permissions . "\n" . $start . "\n" . $expiry . "\n" . $canonicalizedResource . "\n" . $identifier . "\n" . $IP . "\n" . $protocol . "\n" . $version . "\n" . $rscc . "\n" . $rscd . "\n" . $rsce . "\n" . $rscl . "\n" . $rsct;
print $stringToSign;
my $accountKey = 'your-base64-account-key';
my $sig = Digest::SHA::hmac_sha256_base64($stringToSign, decode_base64($accountKey));
$sig .= '=' x (4 - (length($sig) % 4));
print "\n---------------------\n";
print $sig;
print "\n";试试看,应该管用的。
https://stackoverflow.com/questions/59824437
复制相似问题