首页 > 解决方案 > 请求访问令牌 MS Graph 时的 Invalid_grant

问题描述

感谢您阅读本文。

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

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

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

    https://login.microsoftonline.com/ {租户 ID}/oauth2/v2.0/authorize? client_id=3ef3343a-ab22-4c50-12ae2a2d7c67 &response_type=code &redirect_uri=https://localhost:8080 &response_mode=query &scope=offline_access%20user.read &state=12345

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

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

谢谢你的时间!

标签: azure-active-directorymicrosoft-graph-apiaccess-token

解决方案


您不能同时生成 Delegated(有用户)和 Application(没有用户)的单个令牌。您需要提出两个单独的请求。

要生成委托令牌,您首先需要检索授权码(即 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

推荐阅读