微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Azure 表存储表服务 REST APISharedKeyLite 不起作用

如何解决Azure 表存储表服务 REST APISharedKeyLite 不起作用

在看穿这个 link 后,我在邮递员那里尝试了同样的方法

var storageAccount = "mystorage";
var accountKey = "<<primaryKey>>";

var date = new Date();
var UTCstring = date.toUTCString();

var data = UTCstring + "\n" +  "/mystorage/Health"

var encodedData = unescape(encodeURIComponent(data));

var hash = CryptoJS.HmacSHA256(encodedData,CryptoJS.enc.Base64.parse(accountKey));
var signature = hash.toString(CryptoJS.enc.Base64);
var auth = "SharedKeyLite " + storageAccount + ":" + signature;

postman.setEnvironmentvariable("auth",auth);
postman.setEnvironmentvariable("date",UTCstring);

当我向 ATS 发出请求时,到以下网址,

enter image description here

我的身份验证被拒绝了!

enter image description here

有人可以指导我这里出了什么问题吗?!

解决方法

我认为您需要生成一个不记名令牌并将其交给邮递员授权。

如果您使用的是 C#,您可以使用它来获取不记名令牌:

AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
string accesstoken = azureServiceTokenProvider.GetAccessTokenAsync("https://storage.azure.com/").Result;
string bearertoken = "Bearer " + accesstoken;

然后复制不记名令牌:

enter image description here

之后应该就可以了。

,

刚刚意识到我们正在编码的 url 和 data 应该与我们正在查询的 url 完全匹配... 更改后

var data = UTCstring + "\n" +  "/mystorage/Health"

var data = UTCstring + "\n" +  "/mystorage/Health(PartitionKey='USA',RowKey='WA')"

一切开始运作。

更新: 它只需要正确的表查询。以下工作正常,

var data = UTCstring + "\n" +  "/mystorage/Health()" 

url 中的所有过滤器表达式都是从 postman 调用的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。