Azure OAuth2:无法验证访问令牌

iyfjxgzm  于 2023-02-25  发布在  其他
关注(0)|答案(1)|浏览(172)

我正在尝试验证Azure OAuth2提供的访问令牌。我正在使用nimbus验证令牌,但我一直收到“签名无效”错误。
我在一些页面上看到,如果访问令牌包含一个随机数,那么我将无法验证它,因为它意味着只由微软内部使用。我按照本页(https://authguidance.com/azure-ad-troubleshooting/)上的说明获得没有随机数的acecss令牌,但它不工作。
我可以看到ID令牌不包含nonce,但访问令牌包含。
有人知道我如何获得一个可以使用nimbus验证的访问令牌(没有随机数)吗?

e0uiprwp

e0uiprwp1#

请注意,如果您验证使用Microsoft GraphAPI作为范围生成的访问令牌,则会收到"Invalid Signature"(无效签名)错误,因为它具有**nonce**声明

我尝试在我的环境中重现相同的结果,结果如下:

我注册了一个Azure AD应用程序并添加了MicrosoftGraph API permissions,如下所示:

现在我通过Postman使用授权代码流生成了访问令牌id令牌,参数如下:

POST https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/token
client_id:<appID>
grant_type:authorization_code
scope: https://graph.microsoft.com/User.Read openid
code:code
redirect_uri: https://jwt.ms
client_secret: <secret>
    • 答复:**

当我在jwt.io网站中解码上述访问令牌时,我也得到了无效签名错误,因为它有**nonce**声明如下:

要获取不带随机数声明的访问令牌,请将**scope值更改为自定义API**,而不是Microsoft API。
我添加了应用程序ID URI和名为**Custom.Read的新作用域,方法是在应用程序中选择Expose an API**,如下所示:

您可以在应用程序的My API中找到上述作用域,名称如下:

现在,将该范围添加到应用的API权限中,如下所示:

请确保向添加的权限授予管理员许可,如下所示:

为了获得代码,我在浏览器中运行了以下授权请求,如下所示:

https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/authorize
?client_id= <appID>
&response_type=code
&redirect_uri= https://jwt.ms
&response_mode=query
&scope=api://<appID>/.default
&state=12345
    • 答复:**

现在,我通过Postman使用授权代码流将作用域更改为自定义API来生成访问令牌,如下所示:

POST https://login.microsoftonline.com/<tenantID>/oauth2/v2.0/token
client_id:<appID>
grant_type:authorization_code
scope: api://<appID>/Custom.Read openid
code:code
redirect_uri: https://jwt.ms
client_secret: <secret>
    • 答复:**

当我在jwt.io网站中解码上述访问令牌时,它没有**nonce声明和签名验证**成功,如下所示:

相关问题