我正在尝试验证Azure OAuth2提供的访问令牌。我正在使用nimbus验证令牌,但我一直收到“签名无效”错误。
我在一些页面上看到,如果访问令牌包含一个随机数,那么我将无法验证它,因为它意味着只由微软内部使用。我按照本页(https://authguidance.com/azure-ad-troubleshooting/)上的说明获得没有随机数的acecss令牌,但它不工作。
我可以看到ID令牌不包含nonce,但访问令牌包含。
有人知道我如何获得一个可以使用nimbus验证的访问令牌(没有随机数)吗?
1条答案
按热度按时间e0uiprwp1#
请注意,如果您验证使用Microsoft GraphAPI作为范围生成的访问令牌,则会收到"Invalid Signature"(无效签名)错误,因为它具有**
nonce
**声明我尝试在我的环境中重现相同的结果,结果如下:
我注册了一个Azure AD应用程序并添加了MicrosoftGraph
API permissions
,如下所示:现在我通过Postman使用授权代码流生成了访问令牌和id令牌,参数如下:
当我在jwt.io网站中解码上述访问令牌时,我也得到了无效签名错误,因为它有**
nonce
**声明如下:要获取不带随机数声明的访问令牌,请将**
scope
值更改为自定义API**,而不是Microsoft API。我添加了应用程序ID URI和名为**
Custom.Read
的新作用域,方法是在应用程序中选择Expose an API**,如下所示:您可以在应用程序的My API中找到上述作用域,名称如下:
现在,将该范围添加到应用的API权限中,如下所示:
请确保向添加的权限授予管理员许可,如下所示:
为了获得代码,我在浏览器中运行了以下授权请求,如下所示:
现在,我通过Postman使用授权代码流将作用域更改为自定义API来生成访问令牌,如下所示:
当我在jwt.io网站中解码上述访问令牌时,它没有**
nonce
声明和签名验证**成功,如下所示: