Azure active directory Microsoft身份验证请求具有访问令牌的附加作用域
在我看来,微软的授权非常复杂。有这么多的流量和东西去 所以我现在做的是Azure active directory Microsoft身份验证请求具有访问令牌的附加作用域,azure-active-directory,microsoft-graph-api,msal,Azure Active Directory,Microsoft Graph Api,Msal,在我看来,微软的授权非常复杂。有这么多的流量和东西去 所以我现在做的是 使用授权代码流获取特定作用域的令牌。我正在使用以下范围:https://admin.services.crm.dynamics.com//user_impersonation(据我所知,我只能为单个作用域/受众请求令牌) 这个代币很好用。我可以使用收到的承载令牌访问dynamics管理中心 我现在要做的是: 我正在尝试访问Microsoft Graph端点以读取有关用户AAD的信息 我无法使用上面的现有令牌,因为此令牌只有
https://admin.services.crm.dynamics.com//user_impersonation
(据我所知,我只能为单个作用域/受众请求令牌)- 我正在尝试访问Microsoft Graph端点以读取有关用户AAD的信息
- 我无法使用上面的现有令牌,因为此令牌只有
的作用域user\u importion
https://admin.services.crm.dynamics.com/
- 我必须请求另一个作用域为
user.read的令牌
oauth2/v2.0/token
端点与刷新令牌结合使用,为另一个作用域请求令牌(user.read
)。这很好,但我不想为此使用刷新令牌,而是使用访问令牌。这有可能而且有意义吗
这有可能而且有意义吗
否,无法使用访问令牌获取具有添加范围的新访问令牌
如前所述,您可以使用刷新令牌为另一个作用域请求新的访问令牌。刷新令牌没有指定的生存期。通常,刷新令牌的生命周期相对较长。虽然刷新令牌在用于获取新的访问令牌时不会被撤销,但您需要丢弃旧的刷新令牌
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
。在其catch中,您与user.read
as scope进行交互调用。通过这种方法,您将实现增量同意。请注意,user\u impersonation
在此之后仍然可以使用,您的令牌缓存现在将具有两个作用域。您开发的平台是什么?你能分享一下你如何获得代币的代码吗?我不推荐这种方法。如果您使用的是MSAL,则不应手动创建OAuth端点。MSAL就是为你而建的。这种方法的另一个缺点是缓存中没有此访问令牌。当您使用MSAL获取访问令牌时,您还将在应用程序中包括令牌缓存。