You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Cosmos Table DB Postman查询认证格式错误问题求助

解决Azure Cosmos Table DB认证失败问题

核心问题:Authorization头格式不匹配

Cosmos Table DB使用的Shared Key Lite认证机制和Cosmos NoSQL的认证格式完全不同,你当前使用的type={typeoftoken}&ver={tokenversion}&sig={hashsignature}是NoSQL专属格式,不适用于Table API。

正确的Authorization头格式

Table API的认证头必须遵循以下结构:

SharedKeyLite <your-account-name>:<generated-signature>

签名生成与头组装步骤

  1. 构造签名字符串
    按顺序拼接以下内容,各部分用换行符(\n)分隔:

    • HTTP请求方法(如GET、POST)
    • 请求体的MD5哈希值(无请求体则留空字符串)
    • 请求内容类型(如application/json,无内容则留空)
    • UTC格式的当前日期(需符合RFC 1123标准,例:Wed, 15 Nov 2023 08:00:00 GMT)
    • 目标资源路径(格式为/<account-name>/<table-name>,查询所有表则为/<account-name>)
  2. 生成签名
    使用你的Cosmos Table账户密钥(Base64编码),对上述签名字符串执行HMAC-SHA256哈希运算,再将结果转为Base64编码,得到最终签名值。

  3. 组装Authorization头
    按SharedKeyLite <账户名>:<签名值>的格式拼接,作为请求的Authorization头内容。

Postman快速验证方案

  • 必须添加x-ms-date头,值为符合格式的UTC当前时间,Table API依赖该时间做签名校验
  • 确认资源路径正确,比如查询表数据时路径应为/<account-name>/<table-name>
  • 若手动计算签名易出错,可使用Postman预请求脚本自动生成,核心逻辑示例:
var accountName = "<你的账户名>";
var accountKey = "<你的账户密钥>";
var method = pm.request.method;
var contentMD5 = ""; // 无请求体时留空
var contentType = pm.request.headers.get("Content-Type") || "";
var date = new Date().toUTCString();
var resource = pm.request.url.getPath();

var stringToSign = method + "\n" + contentMD5 + "\n" + contentType + "\n" + date + "\n" + resource;

var signature = CryptoJS.HmacSHA256(stringToSign, CryptoJS.enc.Base64.parse(accountKey));
signature = CryptoJS.enc.Base64.stringify(signature);

pm.request.headers.add({
    key: "Authorization",
    value: "SharedKeyLite " + accountName + ":" + signature
});
pm.request.headers.add({
    key: "x-ms-date",
    value: date
});

注:脚本需依赖Postman内置的CryptoJS库,若未加载可手动导入

内容的提问来源于stack exchange,提问作者Matthew North

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 20:58:23