【问题标题】:Invalid_grant when requesting Access token MS Graph请求访问令牌 MS Graph 时的 Invalid_grant
【发布时间】:2021-05-31 01:54:59
【问题描述】:

感谢您阅读本文。

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

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

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

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

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

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

感谢您的宝贵时间!

【问题讨论】:

  • 该错误表明您提出的请求不正确。你检查过 Fiddler 中的请求吗?它应该看起来像this

标签: azure-active-directory microsoft-graph-api access-token


【解决方案1】:

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


更新:

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

权限:

获取授权码:

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,来自之前的。

邮递员中的请求:

【讨论】:

  • 您好帕梅拉,感谢您的回答。我也尝试了不使用 Code= 的方法,但这也不起作用(不幸的是,它在本例中滑落了)。
  • 嗨,@AlexanderBeBrave。当code 不正确时会发生此错误。请按照我的更新检查您的代码。确保删除&state=12345&session_state=xxxx。用错误的代码重现它:i.stack.imgur.com/KKfTx.png.
  • 你好帕梅拉,非常感谢。我在所有请求中都复制了“&state=123345”...终于可以使用了!真棒,你花时间帮助别人!
  • 我的荣幸!很高兴知道:)
【解决方案2】:

您不能同时生成委托 (with a user) 和应用程序 (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]

这会将授权码返回到您在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

【讨论】:

  • 您好,Marc,非常感谢您抽出宝贵时间。我现在开始工作了……问题是我使用了错误的代码部分。但是非常感谢,你的帖子很清楚!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-06
  • 2016-03-05
  • 2016-10-30
  • 1970-01-01
  • 2015-05-30
  • 2016-06-19
相关资源
最近更新 更多