Invalid_grant 请求访问令牌 MS Graph 时

Invalid_grant when requesting Access token MS Graph

感谢阅读本文。

我在使用 Postman 获取 MS Graph 的访问令牌时遇到问题。我一直在阅读关于 Whosebug 的类似帖子,但到目前为止,没有成功。在下面,我添加了一些屏幕截图,其中包含(我相信)此过程所需的所有信息。

  1. 应用权限截图:https://i.stack.imgur.com/4lyM2.png

  2. 我用来获取访问码的link:

    https://login.microsoftonline.com/{Tenant ID}/oauth2/v2.0/授权? client_id=3ef3343a-ab22-4c50-12ae2a2d7c67 &response_type=代码 &redirect_uri=https://localhost:8080 &response_mode=查询 &scope=offline_access%20user.read &state=12345

3) 在遵循此 link 之后,我授予权限并收到一个代码,我将在以下邮递员电话中使用该代码:https://i.stack.imgur.com/ZJv2b.png

我在没有用户的情况下获取访问令牌没有问题,但不幸的是,我需要的不仅仅是应用程序权限。我希望有人能帮助我!

感谢您的宝贵时间!

您需要删除邮递员调用code中的“代码=”,它看起来像“OAAABAAAAiL9Kn......”。 code 只是来自 /authorize 端点的“code”的值。其他的看起来都正确。


更新:

我尝试了您问题中的步骤,效果很好。

权限:

获取授权码:

https://login.microsoftonline.com/{tenant-id}/oauth2/v2.0/authorize?
client_id={client-id}
&response_type=code 
&redirect_uri=https://localhost:44300/
&response_mode=query 
&scope=offline_access%20user.read 
&state=12345

接收代码:

https://localhost:44300/?code=0.ATcATqvJ...vv1MbCO6MN_uCAA&state=12345&session_state=7ac58b8f-b2af-45fa-be4b-0b2c2a003e2e

代码是0.ATcATqvJ...vv1MbCO6MN_uCAA来自上一个

在 Postman 中请求:

您不能生成同时委托的单个令牌 (with a user) and Application (without a user)。您需要提出两个单独的请求。

要生成委托令牌,您首先需要检索授权码(即 authrorization_code 授权)。这是通过将用户重定向到以下地址来完成的(换行符只是为了便于阅读)

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
client_id=[APPLICATION ID]&
response_type=code&
redirect_uri=[REDIRECT URI]&
scope=[SCOPE]

这将 return 授权代码到您在 redirect_uri 参数中指定的地址(请注意,此地址必须 包含在您的应用中登记)。然后,您将此代码 POST 带到 /token 端点,如下所示:

https://login.microsoftonline.com/common/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded

grant_type=authorization_code&
code=[AUTHORIZATION CODE]&
client_id=[APPLICATION ID]&
client_secret=[PASSWORD]&
scope=[SCOPE]&
redirect_uri=[REDIRECT URI]

对于应用程序令牌,您只需跳过授权代码步骤并 POST 直接到 /token 端点:

https://login.microsoftonline.com/{tenantDomain}/oauth2/v2.0/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&
client_id=[APPLICATION ID]&
client_secret=[PASSWORD]&
scope=https://graph.microsoft.com/.default