【问题标题】:AADSTS5002710: Invalid JWT token: header is malformedAADSTS5002710:无效的 JWT 令牌:标头格式错误
【发布时间】:2021-04-12 10:39:55
【问题描述】:

我正在尝试在我的客户端 (ReactJS)、Express + Node.js 服务器 (API) 和 Microsoft Graph 之间实现“代表”流程。

到目前为止,我已经向 microsoft(客户端)请求了一个 accessToken,并向我的 API 发出了请求。

我遇到了错误“AADSTS5002710:无效的 JWT 令牌:标头格式错误。”当我尝试从我的 API 向 https://login.microsoftonline.com/tenantID/oauth2/v2.0/token 发出 Axios 发布请求时

完全错误:
{ error: 'invalid_request', error_description: 'AADSTS5002710: Invalid JWT token: header is malformed.\r\n' + 'Trace ID: 068a382b-6f83-40f6-b1b1-7134223f4500\r\n' + 'Correlation ID: f46a2c03-84e8-46b3-b9d6-467174befa0b\r\n' + 'Timestamp: 2021-01-06 16:26:40Z', error_codes: [ 5002710 ], timestamp: '2021-01-06 16:26:40Z', trace_id: '068a382b-6f83-40f6-b1b1-7134223f4500', correlation_id: 'f46a2c03-84e8-46b3-b9d6-467174befa0b' }

我的请求正文根据教程“https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow”。

由于微软在线服务器的结果,我不断收到上述错误。

我使用自己的自定义范围发出了原始(客户端)请求
api://54ee17f...cfe06/Access.Test

【问题讨论】:

  • 我有“assertion=Bearer {accessToken}”而不是只有“assertion={accessToken}”,删除“Bearer”解决了问题。

标签: azure-active-directory jwt azure-ad-graph-api send-on-behalf-of


【解决方案1】:

我按照教程在 Postman 中使用 On-Behalf-Of 流。但效果很好。

我的步骤:

  1. 将 Web API B 的 API 权限添加到 Web API A

  1. 请求 Web API A 以获取访问令牌(assertion 的下一步)和身份验证代码流

获取

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize
?scope={like api://1108f6-xxxxxxx-9f622/test} openid
&redirect_uri={redirect_uri of Web API A}
&nonce=123
&client_id={client-id of Web API A}
&response_type=id_token token
  1. 请求 Web API B 以获取 Microsoft Graph API 的访问令牌

发布

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
&client_id={client_id of Web API B}
&client_secret={client_secret}
&assertion={access token from previous step}
&scope=https://graph.microsoft.com/user.read offline_access
&requested_token_use=on_behalf_of
  1. 调用 Microsoft Graph API,例如 GET https://graph.microsoft.com/v1.0/users

您可以在https://jwt.io/ 中解码您的访问令牌(断言),然后检查HEADER

【讨论】:

  • 谢谢帕梅拉,这让我更清楚地理解了。问题是我有“Bearer {accessToken}”作为导致错误的断言。一旦我删除它现在按预期工作。再次感谢。
猜你喜欢
  • 2018-08-20
  • 2022-07-08
  • 2018-12-10
  • 2021-04-13
  • 2018-09-25
  • 1970-01-01
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多