【问题标题】:Azure Account Shared Access SignitureAzure 帐户共享访问签名
【发布时间】:2017-02-17 11:39:27
【问题描述】:

我正在尝试构建帐户级别的共享访问签名,以便我的客户可以访问存储帐户中的所有容器。我正在关注这些文档Account SAS。这似乎很简单,但我不断收到以下错误消息:

“签名不匹配。使用的签名字符串是帐户名\nrl\nb\nsc\n\n2016-10-09\n\n\n2015-04-05\n”。

我的参数是相同的,所以我怀疑这与我如何散列要签名的字符串有关。下面是我构建令牌的方式。

var crypto = require('crypto');
var accountName = 'accountname';
var accountKey = 'tH37FTlG3TUT86caMrt2y5kOzof8nFqqA6spzg6r7HPRojE1zDiLJD/xE4oLFDh4RNqAmymvlV7fm8W4SF8cJg==';

var signedPermissions = "sp=rl";
var signedServcies = "ss=b";
var signedResourceType = "srt=sc";
var signedExpiry = "se=2016-10-09";
var signedVersion = "sv=2015-04-05";

var stringToSign = accountName + "\n" + signedPermissions + "\n" + signedServcies + "\n" + signedResourceType + "\n" + signedExpiry + "\n" + signedVersion + "\n";
var hmacsha256 = crypto.createHmac('sha256', accountKey).update(stringToSign).digest('base64');
var token = signedPermissions + "&" + signedServcies + "&" + signedResourceType + "&" + signedExpiry + "&" + signedVersion + "&sig=" + hmacsha256;

我也尝试过使用crypto-js,但无济于事。用于访问容器中 blob 的最终 URL 是...

https://accountname.blob.core.windows.net/containername/blobName?srt=sc&se=2016-10-09&api-version=2015-04-05&sp=rl&ss=b&sv=2015-04-05&sig=IFD2wyfRAsHGU5IFg3RbwSJW6tRE0m0%2FxgAYvJ%2FmnEk%3D

我已经尝试了好几天,如果知道我做错了什么,我真的很感激。谢谢。

【问题讨论】:

  • 如果这是您的实际帐户密钥,那么我建议立即更改它,因为拥有此密钥的任何人都可以访问您的帐户

标签: javascript node.js azure azure-storage


【解决方案1】:

请尝试以下方法(代码无耻地取自Azure Storage Node.js library):

var hmacsha256 = crypto.createHmac('sha256', new Buffer(accountKey, 'base64')).update(stringToSign, 'utf-8').digest('base64');

【讨论】:

  • 我注意到的另一件事是您没有在stringToSign 中包含所有参数(例如signedstart)。如果您不使用该参数,请为此添加\n)。
  • 我把它改成了 var stringToSign = accountName + "\n" + signedPermissions + "\n" + signedServcies + "\n" + signedResourceType + "\n\n" + signedExpiry + "\n\n\n" + signedVersion + "\n"; 但不幸的是我仍然遇到同样的错误。
【解决方案2】:

苯,对于stringToSign,值不应该有参数名吗?

var signedPermissions = "rl"; var signedServcies = "b"; var signedResourceType = "sc"; var signedExpiry = "2016-10-09"; var signedVersion = "2015-04-05";

【讨论】:

  • 而且 Gaurav 的评论也是有效的。您还应该像之前尝试过的那样包含所有参数。
猜你喜欢
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2014-09-22
  • 2013-05-29
  • 2018-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多