Azure生成的JWT签名无效:问题原因及解决方法
Azure JWT令牌无效签名问题排查与解决
问题概述
已通过Azure AD成功获取JWT令牌,但调用REST API时返回签名验证失败错误:
Token verification has failed: JWT rejected due to invalid signature. Additional details: [[9] Invalid JWS Signature: JsonWebSignature
使用jwt.io解析令牌时,声明信息可正常查看,但签名模块显示无效。
令牌生成配置(Postman)
- Token URL:
https://login.microsoftonline.com/XXXXXXX/oauth2/v2.0/token
- Client ID:
CCCCC - Scope:
openid profile email - Grant Type:
password(基于用户名密码模式)
常见原因
- 签名算法不匹配:API服务端预期的签名算法(如RS256)与Azure签发令牌使用的算法不一致,比如令牌用HS256签名,但服务端按RS256验证。
- 验证密钥过时/错误:Azure AD的公钥会定期轮换,若服务端硬编码旧公钥,或使用了错误租户的公钥,会导致签名校验失败。
- 令牌完整性受损:令牌在传输或粘贴过程中被修改(如字符截断、编码错误),导致签名与内容不匹配。
- 权限范围不匹配:请求API所需的权限未包含在令牌的scope中,部分服务会返回签名无效的误导性错误。
- 租户/客户端ID不匹配:服务端验证时使用的租户ID或客户端ID与生成令牌时的配置不一致。
解决步骤
- 确认签名算法一致性:
- 在jwt.io查看令牌header的
alg字段,确定实际签名算法。 - 检查API服务端的验证配置,确保服务端使用的算法与
alg字段完全一致。
- 在jwt.io查看令牌header的
- 动态获取Azure公钥:
避免硬编码公钥,从Azure AD的公钥端点(https://login.microsoftonline.com/{tenant-id}/discovery/v2.0/keys)实时获取最新公钥用于验证。 - 检查令牌完整性与请求格式:
- 完整复制Azure返回的令牌,在jwt.io中粘贴确认无字符缺失或多余。
- 确保请求头中令牌格式为
Bearer {完整令牌},无空格或格式错误。
- 修正权限范围:
确认API要求的权限scope,将其添加到Postman的Scope参数中(例如API专属scope格式为api://{client-id}/access_as_user)。 - 核对租户/客户端ID:
确保服务端验证配置的租户ID(XXXXXXX)和客户端ID(CCCCC)与生成令牌时的参数完全一致。
内容的提问来源于stack exchange,提问作者sonia belhadj
相关产品推荐
相关产品推荐

