Microsoft身份验证请求具有访问令牌的其他范围

时间:2020-01-30 11:18:59

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

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

所以我目前正在做的事情

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

我现在想做的是以下事情:

  • 我正在尝试访问Microsoft Graph端点以读取有关用户AAD的信息。
  • 我无法使用上面的现有令牌,因为该令牌仅具有user_importation的{​​{1}}范围
  • 我必须请求范围为https://admin.services.crm.dynamics.com/的另一个令牌

那就是我被困住的地方。如何使用现有的access_token请求其他范围?

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

2 个答案:

答案 0 :(得分:0)

这甚至可能并且有意义吗?

否,您无法使用访问令牌来获取具有附加范围的新访问令牌

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

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

答案 1 :(得分:0)

您要查找的方案称为增量同意。这对于MSAL完全可行。知道您要开发的平台真是太好了。

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