【问题标题】:Is it possible to get user's permission scope with Microsoft Graph API Access Token (not application's scope)?是否可以使用 Microsoft Graph API 访问令牌(不是应用程序的范围)获取用户的权限范围?
【发布时间】:2020-06-17 12:22:47
【问题描述】:

我有一个 AAD 应用程序,其中包含授予的委派权限列表。喜欢:

Directory.AccessAsUser.All
Directory.ReadWrite.All
Group.ReadWrite.All

大多数用户没有这样的权限。 我想为他们隐藏一些 UI 元素(例如编辑组)

但是作为访问令牌的响应,我得到了所有应用范围。而且这些信息并不是真正有用的。我想防止用户收到诸如“权限不足以完成操作”之类的错误

这可能吗?

【问题讨论】:

  • 单个访问令牌只能包含一种类型的范围(应用程序或委托)。因此,如果您的特定场景需要 Application 和 Delegated 范围,您的应用程序将需要获取两个单独的令牌。第一个将代表用户并使用授权线或隐式授权获得,第二个将代表应用程序本身并使用客户端凭据授权获得。
  • @SruthiJ-MSFTIdentity,您能否提供任何链接,我如何设置身份验证流程以获取用户的令牌?
  • 请尝试auth code
  • 嗨,你检查我的回答了吗?有用吗?
  • 仍在进行中。我会在下周初给你答复。我发现了什么:看起来用户的范围正在使用 /authorize

标签: oauth azure-active-directory microsoft-graph-api


【解决方案1】:

根据评论,您需要一些有关使用 Microsoft Graph 的身份验证代码流的信息。

请参考官方文档:Microsoft Graph API 下的Get access on behalf of a user

有两个主要步骤:

Authorization request:

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&response_mode=query
&scope=offline_access%20user.read%20mail.read
&state=12345

你会得到一个code 参数。第二步使用:

Token request:

POST /{tenant}/oauth2/v2.0/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded

client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&scope=user.read%20mail.read
&code=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq3n8b2JRLk4OxVXr...
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&grant_type=authorization_code
&client_secret=JqQX2PNo9bpM0uEihUPzyrh    // NOTE: Only required for web apps

然后您将获得包含 Delegated 权限的访问令牌。

如何在代码中实现auth代码流,请参考Microsoft Graph SDKs overviewAuthorization code provider 会很有帮助。

【讨论】:

    猜你喜欢
    • 2013-08-14
    • 2019-09-06
    • 2017-06-30
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 2018-08-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多