凭据正确时Azure Log Analytics API返回InvalidAuthorization错误如何处理
报错信息:
{"Error":"InvalidAuthorization","Message":"An invalid signature was specified in the Authorization header"}
在确认Authorization头部的SharedKey格式符合要求的前提下,按以下步骤定位问题:
1. 校验签名原始字符串构造规范
- 签名字符串必须严格遵循以下顺序拼接,所有
\n换行符不能遗漏,空字段也要保留占位:请求方法(POST/GET) + "\n" + Content-MD5值 + "\n" + Content-Type值 + "\n" + x-ms-date头值 + "\n" + /api/logs
x-ms-date头部必须为UTC时间,格式遵循RFC1123规范(示例:Wed, 21 Aug 2024 12:00:00 GMT),本地时间和UTC时间的误差不能超过15分钟,否则会直接判定签名无效。
2. 校验密钥准确性
- 确认使用的是Log Analytics对应工作区的主密钥/辅助密钥,不要混用Azure AD令牌、其他Azure服务的访问密钥。
- 密钥从Azure门户复制时不要带入多余的空格、换行符,建议直接从工作区「代理管理」页面复制完整密钥字符串。
3. 校验请求头和签名内容一致性
- 携带请求体的POST请求必须计算请求体的MD5值填入
Content-MD5头部,Content-Type取值必须和签名里的Content-Type字段完全一致,常用取值为application/json。 - 无请求体的GET请求,签名中的Content-MD5、Content-Type字段要留空,请求头也不要传入这两个参数。
4. 校验请求地址与路径
- 签名中的资源路径必须固定为
/api/logs,不要拼接查询参数。 - 完整请求地址格式为
https://<你的工作区ID>.ods.opinsights.azure.com/api/logs?api-version=2016-04-01,api-version参数必须为2016-04-01,版本号错误会触发签名校验失败。
5. 校验签名加密逻辑
签名生成必须严格遵循以下流程,任意一步错误都会导致签名无效:
- 将拼接好的签名原始字符串用UTF-8编码
- 把从Azure门户获取的工作区密钥做Base64解码,得到加密密钥字节数组
- 用HMAC-SHA256算法,以上一步的密钥加密UTF-8编码后的签名字符串
- 将加密后的结果做Base64编码,得到最终签名字段
- 拼接Authorization头部:
Authorization: SharedKey <工作区ID>:<最终签名字段>
内容的提问来源于stack exchange,提问作者Savvas Dalkitsis
相关产品推荐
相关产品推荐

