【问题标题】:Microsoft Authentication request additional scope with Access TokenMicrosoft 身份验证请求具有访问令牌的附加范围
【发布时间】:2020-01-30 11:18:59
【问题描述】:

在我看来,Microsoft Authentcation 非常复杂。有这么多的流程和东西!

所以我现在正在做的是

  1. 使用授权代码流获取特定范围的令牌。我正在使用以下范围:https://admin.services.crm.dynamics.com//user_impersonation(据我所知,我只能为单个范围/受众请求令牌)
  2. 令牌工作正常。我可以使用收到的不记名令牌访问动态管理中心。

我现在要做的是:

  • 我正在尝试访问 Microsoft Graph 端点以读取有关用户 AAD 的信息。
  • 我不能使用上面的现有令牌,因为这个令牌只有user_importation 的https://admin.services.crm.dynamics.com/ 范围
  • 我必须请求另一个令牌,范围为user.read

这就是我卡住的地方。如何使用现有的 access_token 请求额外的范围?

我可以将oauth2/v2.0/token 端点与刷新令牌结合使用来请求另一个范围的令牌(user.read)。这工作正常,但我不想为此使用刷新令牌,而是使用 access_token。这是否可能并且有意义?

【问题讨论】:

  • 你在开发什么平台?你能分享一下你如何获得令牌的代码吗?

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


【解决方案1】:

这是否可能并且有意义?

不,您不能使用访问令牌来获取具有附加范围的新访问令牌。

正如您所说,您可以使用刷新令牌为另一个范围请求新的访问令牌。刷新令牌没有指定的生命周期。通常,刷新令牌的生命周期相对较长。尽管刷新令牌在用于获取新的访问令牌时不会被撤销,但您应该丢弃旧的刷新令牌。

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=https://admin.services.crm.dynamics.com/user_impersonation user.read
&refresh_token=OAAABAAAAiL9Kn2Z27UubvWFPbm0gLWQJVzCTE9UkP3pSx1aXxUjq...
&grant_type=refresh_token
&client_secret=JqQX2PNo9bpM0uEihUPzyrh      // NOTE: Only required for web apps

你可以参考这个tutorial。

【讨论】:

  • 我不推荐这种方法。如果您使用的是 MSAL,则不应手动制作 OAuth 端点。 MSAL 旨在为您做到这一点。这种方法的另一个缺点是缓存中没有这个访问令牌。当您使用 MSAL 获取访问令牌时,您还可以在您的应用程序中包含开箱即用的令牌缓存。
【解决方案2】:

您正在寻找的方案称为增量同意。这对于 MSAL 是完全可行的。顺便知道您正在开发什么平台会很棒。

您可以做的是为user.read 请求访问令牌并期望MsalUiRequiredException 被抛出。在其捕获中,您使用user.read 作为范围进行交互式调用。通过这种方法,您将实施增量同意。请注意,user_impersonation 在此之后仍然可以使用,并且您的令牌缓存现在将具有两个范围。

【讨论】:

    猜你喜欢
    • 2020-01-15
    • 2018-08-27
    • 1970-01-01
    • 1970-01-01
    • 2022-08-22
    • 1970-01-01
    • 2018-04-09
    • 2021-08-26
    • 1970-01-01
    相关资源
    最近更新 更多