azure - 如何使用 Postman 将查询发送到 Azure 表 REST API

标签 azure postman azure-table-storage

我正在尝试使用 Postman 向 Azure 表 REST API 发出 GET 请求。 我可以使用我找到的 C# 程序发出工作请求,但是当我尝试将相同的信息复制到 Postman 请求中时,它会返回以下错误:

Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.

使用 C# 程序,我生成 UTC 时间和授权代码。 该程序将给出以下输出:

x-ms-date: Fri, 01 Nov 2019 10:13:26 GMT

Authorization: SharedKeyLite username:e4IREMOVEDSOMELETTERST4Ag=

Request URI: https://username.table.core.windows.net/MainTable(PartitionKey='akey',RowKey='130')

生成的输出在 C# 程序中有效,因为当我使用时:

    result = await Client.GetAsync(requestUri);

结果将给出(akey, 130)的信息。 当我将它们传递给 postman 时,它仍然会给我一个错误。 每当我创建新的授权字符串时,我都会更新 postman 中的日期。

我的 postman 设置如下: postman

我最终想用 ESP32 发出这个请求,所以它可能有点无关,但 ESP 给了我同样的错误。任何有关为 Postman 或 ESP 设置正确 header 的提示都值得赞赏。

最佳答案

要使此工作正常进行,首先在您的环境中创建两个变量:

{{utcDate}}
{{authToken}}

然后创建一个新的 Get 请求并设置 header ,如下所示:

x-ms-version             2015-12-11

x-ms-date                {{utcDate}}

Authorization            SharedKey resourceName:{{authToken}}

DataServiceVersion       3.0;NetFx

MaxDataServiceVersion    3.0;NetFx

Accept                   application/json;odata=nometadata

最后,定义一个预请求脚本:

var now = new Date().toUTCString();
pm.environment.set("utcDate", now);
var hcar = "/resourceName/TableName";
var verb = request.method;
var cntMd5 = "";
var cntType = "";
var mKey="<Your service key goes here>";

var text = verb + "\n" + (cntMd5 || "") + "\n" + (cntType || "") + "\n" + now + "\n" + hcar;

var key = CryptoJS.enc.Base64.parse(mKey);
var signature = CryptoJS.HmacSHA256(text, key);
var base64Bits = CryptoJS.enc.Base64.stringify(signature);
pm.environment.set("authToken", base64Bits);

变量的原因是,authToken是因为您需要一个占位符来存储计算的 token ,utcDate是因为必须使用 header 中的相同日期来计算 token 。

关于azure - 如何使用 Postman 将查询发送到 Azure 表 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58657838/

相关文章:

c# - 如何将 Table.ExecuteQuerySegmentedAsync() 与 Azure 表存储结合使用

linq - 如何在Azure表Linq查询中使用包含?

azure - 验证发行者 - token 具有发行者 https ://login. microsoftonline.com/Xv2.0 但示例意味着我应该使用 https ://sts. windows.net/X 进行验证

c# - 在 Restsharp 中获得与在 Postman 中不同的响应

azure - 使用 Postman 触发 Azure 数据工厂管道

serialization - 是否有 EDM/OData 类型与 CLR 类型之间的映射器?

azure - 如何查找Azure API应用程序的IP地址以为其生成SAS token ?

azure - 如何提交支持请求中的 Azure 应用服务配额增加?

Azure 登录 Multi-Tenancy AD 应用失败

node.js - Express + Postman,req.body 为空