获取访问令牌时 invalid_grant 错误

BU0*_*BU0 6 azure-active-directory azure-ad-b2c microsoft-graph-api

我正在尝试构建一个网站,用户可以通过 Azure AD B2C 登录。登录后,我尝试提供一个安全区域,用户可以在其中通过 Microsoft Graph API 更改其 Azure B2C 用户属性(名字、姓氏等)。

我正在尝试遵循获取令牌文档

一切都在进行到步骤 #3,其中使用我在返回 URL 上收到的代码进行https://login.microsoftonline.com/common/oauth2/v2.0/token调用以获取。access_token

这是我正在做的事情的一般流程:

  1. 最终用户单击我的本地主机站点上的登录链接,该链接链接到我的 Azure B2C 租户策略。链接看起来像这样:
https://login.microsoftonline.com/mytenantname.onmicrosoft.com/oauth2/v2.0/authorize
?client_id=[MyAppID]
&response_type=code+id_token
&redirect_uri=http%3A%2F%2Flocalhost%3A17000%2Fprocessing%2Findex
&response_mode=query
&scope=openid%20offline_access%20https%3A%2F%2Fgraph.microsoft.com%2Fuser.read%20https%3A%2F%2Fgraph.microsoft.com%2Fuser.write
&state=[MyCustomState]&p=[MyCustomPolicy]
Run Code Online (Sandbox Code Playgroud)
  1. 用户登录并被重定向到redirect_uri.

  2. redirect_uri成功收到codeid_token、 和state值。

  3. code从中获取值并POST https://login.microsoftonline.com/common/oauth2/v2.0/token使用以下正文发出请求:

POST https://login.microsoftonline.com/common/oauth2/v2.0/token
HTTP/1.1

grant_type=authorization_code
&code=[code]
&client_secret=[application secret]
&scope=openid%20offline_access%20https%3A%2F%2Fgraph.microsoft.com%2Fuser.read%20https%3A%2F%2Fgraph.microsoft.com%2Fuser.readwrite
&redirect_uri=http%3A%2F%2Flocalhost%3A17000%2Fprocessing%2Findex
Run Code Online (Sandbox Code Playgroud)
  1. 我从该端点收到的响应代码是上面的错误消息。
{
  "error": "invalid_grant",
  "error_description": "AADSTS9002313: Invalid request. Request is malformed or invalid.\r\nTrace ID:6d7a8e32-bcbf-4fc4-a37a-87dae4781b00\r\nCorrelation ID:252912b7-5775-491a-968f-00ab03696dd9\r\nTimestamp: 2019-06-2722:11:18Z",
  "error_codes": [9002313],
  "timestamp": "2019-06-27 22:11:18Z",
  "trace_id": "6d7a8e32-bcbf-4fc4-a37a-87dae4781b00",
  "correlation_id": "252912b7-5775-491a-968f-00ab03696dd9"
}
Run Code Online (Sandbox Code Playgroud)

其他 StackOverflow 帖子提到验证 redirect_uri 必须在初始登录和后续 access_token 请求之间匹配。它们对我来说看起来相同,但我仍然收到错误。

有什么想法可能会出问题吗?

Md *_*ron 1

似乎您正在尝试使用获取访问令牌Authorization Code Grant V2.0

您的请求与格式不匹配Authorization Code Grant V2.0,并且您遇到了该错误。

Authorization Code Grant V2.0您应该发送如下所示的令牌请求:

Token Endpoint: `https://login.microsoftonline.com/common/oauth2/v2.0/token` 

client_id:b603c7be-_YourApp_ID-e6921e61f925 

scope:https://graph.microsoft.com/User.ReadWrite.All 

redirect_uri:https://www.getpostman.com/oauth2/callback 

grant_type:authorization_code 

client_secret:Vxf1SluKbgu4P_YourAppSecret_DSeZ8wL/Yp8ns4sc= 

code:OAQABAAIAAADCoMpjJXrxTq9VG9te-7FXrnBIp82sWR1nC
Run Code Online (Sandbox Code Playgroud)

详细信息请参见屏幕截图:

在此输入图像描述