Azure OAuth2访问令牌验证失败:如何获取无nonce的可验证令牌?
解决Azure AD Access Token含Nonce导致Nimbus验证失败的问题
核心原因
Azure AD针对不同场景返回的Access Token结构不同:如果是发给微软自身服务的token(比如调用Graph API),会包含nonce字段,这类token仅微软内部可验证,第三方库(如Nimbus)无法通过签名校验。而发给自定义应用的token则不会包含nonce,可正常验证。
获取可验证Access Token的关键步骤
- 确保请求自定义应用权限:不要请求Microsoft Graph等微软内置服务的权限,而是申请你自己注册的Azure AD应用(资源应用)的自定义权限或委托权限。
- 指定正确的资源/受众参数:
- 若用v1.0端点,
resource参数必须填写自定义应用的客户端ID或应用ID URI,而非微软服务ID; - 若用v2.0端点,
scope参数要包含自定义应用的权限(格式为应用ID URI/权限名),aud会自动对应你的应用ID。
示例请求参数(v1.0授权码模式):
client_id=你的客户端ID client_secret=你的客户端密钥 grant_type=authorization_code code=授权码 redirect_uri=回调地址 resource=你的应用ID URI - 若用v1.0端点,
- 匹配Nimbus验证配置:验证时,配置Azure AD租户的公开JWKS密钥端点,并将受众(aud)设置为你的自定义应用ID,确保签名校验逻辑对应正确的密钥。
额外排查点
- 解码token确认
aud字段:用jwt.io解码返回的Access Token,检查受众是否为你的应用ID,如果是微软服务ID,说明资源参数设置错误。 - 核对应用授权配置:在Azure AD门户中,确认客户端应用已获得资源应用的权限授权,且资源应用已正确暴露所需权限。
内容的提问来源于stack exchange,提问作者Turik Mirash
相关产品推荐
相关产品推荐

