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

Azure App Config HMAC认证调用返回401 Invalid Signature错误如何解决

401 Invalid Signature 错误诱因及修复方案

现有代码的直接错误

你当前代码中的密钥处理逻辑完全不符合官方要求:
从Azure门户获取的App Config访问密钥本身就是Base64编码格式,官方要求先对该密钥做Base64解码得到原始字节流,再作为HMAC签名的计算密钥。而你的代码反而对原始密钥字符串额外做了一次Base64编码,再转ASCII字节,生成的密钥和服务端预期完全不匹配,是导致报错的最直接原因。

正确的密钥处理代码如下:

// 直接对门户获取的密钥做Base64解码,不需要额外编码
var secret = Convert.FromBase64String("<my app config secret>");

其他可能的错误诱因

  • 客户端UTC时间偏差过大:HMAC签名校验要求客户端时间和Azure服务端时间偏差不能超过15分钟,若本地系统时间不准确,会直接导致签名校验失败。
  • 签名字符串拼接细节疏漏:
    • HTTP方法必须使用全大写格式,例如PUT不能写为小写put
    • 拼接的请求路径、查询参数必须和实际请求的URI完全一致,查询参数的顺序不能随意调整,例如不能把label=dev&api-version=1.0调换为api-version=1.0&label=dev
    • 内容哈希计算必须和实际请求体完全匹配,建议创建请求体时显式指定编码和媒体类型,避免默认值差异导致哈希不匹配:
      Content = new StringContent(JsonSerializer.Serialize(body), Encoding.UTF8, "application/json")
      
  • Authorization请求头格式错误:请求头必须严格符合HMAC-SHA256 Credential={凭证ID}, SignedHeaders=date;host;x-ms-content-sha256, Signature={签名值}的格式,SignedHeaders中声明的请求头顺序、大小写必须和签名字符串中拼接的请求头顺序完全一致。
  • 特殊字符转义规则不一致:如果键名、标签包含特殊字符,要确保URI编码规则和服务端一致,例如空格统一编码为%20,不要手动拼接转义内容,推荐直接用Uri类生成请求地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 09:15:02