首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure:手动创建SAS

Azure:手动创建SAS
EN

Stack Overflow用户
提问于 2020-01-20 13:35:04
回答 1查看 144关注 0票数 0

我正在尝试实现一个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;

要签名的字符串:

代码语言:javascript
复制
r

2020-05-01T07:59:00Z
/blob/ribdkstoragepoc/project-poc/foo/koteyka.jpg



2018-03-28
b

签名演算: my $sig =$sig $key);

最后,最终的URL看起来是:https://ribdkstoragepoc.blob.core.windows.net/project-poc/foo/koteyka.jpg?sig=YcwWvOT2FtOZGbXQxMAoSxvA2HhRmMAUp%2B6WUY%2Bjbjg&sv=2018-03-28&se=2020-05-01T07%3A59%3A00Z&sr=b&sp=r

正如我已经说过的那样,这是行不通的。有人有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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)来填充您的签名。

基于这些,下面是代码:

代码语言:javascript
复制
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";

试试看,应该管用的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59824437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档