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")
- HTTP方法必须使用全大写格式,例如
- Authorization请求头格式错误:请求头必须严格符合
HMAC-SHA256 Credential={凭证ID}, SignedHeaders=date;host;x-ms-content-sha256, Signature={签名值}的格式,SignedHeaders中声明的请求头顺序、大小写必须和签名字符串中拼接的请求头顺序完全一致。 - 特殊字符转义规则不一致:如果键名、标签包含特殊字符,要确保URI编码规则和服务端一致,例如空格统一编码为
%20,不要手动拼接转义内容,推荐直接用Uri类生成请求地址。
内容的提问来源于stack exchange,提问作者auburg
相关产品推荐
相关产品推荐

