在我看来,Microsoft身份验证非常复杂。有这么多的流量和东西!
所以我目前正在做的是
https://admin.services.crm.dynamics.com//user_impersonation
据我所知,我只能为单个范围/受众群体请求令牌)我现在想做的是以下内容:
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,则不应手动制作OAuth端点。MSAL旨在为您做到这一点。这种方法的另一个缺点是缓存中没有此访问令牌。当您使用MSAL来获取访问令牌时,还需要在应用程序中立即使用令牌缓存。