Microsoft认证在我看来非常复杂。有这么多的流程和东西去!
所以我目前正在做的是
- 使用授权代码流获取特定范围的令牌。我使用以下范围:
https://admin.services.crm.dynamics.com//user_impersonation
(据我所知,我只能为单个范围/受众请求令牌( - 令牌工作正常。我可以使用收到的持有者令牌访问动态管理中心。
我现在要做的是:
- 我正在尝试访问 Microsoft 图形终结点以读取有关用户 AAD 的信息。
- 我无法使用上面的现有令牌,因为这个令牌只有
user_importation
范围https://admin.services.crm.dynamics.com/
- 我必须请求另一个范围为
user.read
的令牌
这就是我被困住的地方。如何使用现有access_token请求其他范围?
我可以将oauth2/v2.0/token
终结点与刷新令牌结合使用,以请求另一个作用域(user.read
(的令牌。这工作正常,但我不想为此使用刷新令牌,而是使用access_token。这甚至可能并且有意义吗?
这甚至可能并且有意义吗?
否,不能使用访问令牌获取具有附加范围的新访问令牌。
如前所述,可以使用刷新令牌为另一个范围请求新的访问令牌。刷新令牌没有指定的生存期。通常,刷新令牌的生存期相对较长。尽管刷新令牌在用于获取新的访问令牌时不会被吊销,但应丢弃旧的刷新令牌。
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
您可以参考本教程。
您正在寻找的方案称为增量同意。这在 MSAL 中是完全可行的。顺便说一下,很高兴知道您正在开发什么平台。
您可以做的是为user.read
请求访问令牌,并期望抛出MsalUiRequiredException
。在其捕获中,您以user.read
作为范围进行交互式调用。使用此方法,您将实现增量同意。请注意,在此之后,user_impersonation
仍将可用,并且令牌缓存现在将同时具有这两个作用域。