我正在从https://login.microsoftonline.com/common/oauth2/v2.0/authorize
请求OAuth2.0令牌。我正在申请这些范围:
[
'https://graph.microsoft.com/User.Read',
'https://graph.microsoft.com/Calendars.Read.Shared',
'offline_access',
'profile',
'email',
'https://outlook.office.com/mail.read'
]
我正在尝试同时获得Microsoft Graph范围和Office 365范围,但它给了我:
AADSTS70011:输入参数“scope”的提供值无效。范围https://graph.microsoft.com/User.Read https://graph.microsoft.com/Calendars.Read.Shared offline_access个人资料电子邮件https://outlook.office.com/mail.read无效
如果我取出outlook.office.com
范围或两个graph.microsoft.com
范围,那么它就可以了。
有没有办法可以同时访问它们?
答案 0 :(得分:1)
v2.0 auth模型不支持请求同一请求中两个资源的权限,尝试分离请求,只要获得每个资源受众的访问令牌,就可以访问这两个API。
答案 1 :(得分:0)
这是一种不同的方法,它允许您访问多个资源,只需一个登录请求(但访问令牌不同)。
根据所使用的流程,应该向您返回一个刷新令牌,它可以为您提供不同资源的访问令牌。
A
(以及刷新令牌)。B
,方法是仅从其他资源 (Office 365) 请求范围在您的情况下,令牌刷新原始 HTTP 请求将如下所示(身份验证代码流):
POST /common/oauth2/v2.0/token HTTP/1.1
Host: https://login.microsoftonline.com
Content-Type: application/x-www-form-urlencoded
client_id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
&scope=https://outlook.office.com/mail.read
&refresh_token=...
&grant_type=refresh_token
&client_secret=...
上述注意事项:正文中添加了换行符以提高可读性。 scope
应该是 url 编码的。
您现在有两个令牌:A
适用于 Graph,而 B
适用于 Office 365。
只能使用多资源刷新令牌。您可以在 openid-configuration 中查看支持。要显示特定于租户的配置,请将 url 中的 common
替换为租户域。
microsoft_multi_refresh_token:可选。一个布尔值,指示 OpenID 提供程序是否支持多资源刷新令牌,这些刷新令牌可以兑换为向 AD FS 服务器注册的任何资源的访问令牌。