Azure mulit租户应用程序未获取具有新定义作用域的令牌
我正在开发一个Azure多租户应用程序,它使用来自Microsoft Graph API和Windows Azure Active Directory资源的作用域。我们使用的是v1 OpenID身份验证代码流。Azure mulit租户应用程序未获取具有新定义作用域的令牌,azure,oauth-2.0,azure-active-directory,microsoft-graph-api,azure-ad-graph-api,Azure,Oauth 2.0,Azure Active Directory,Microsoft Graph Api,Azure Ad Graph Api,我正在开发一个Azure多租户应用程序,它使用来自Microsoft Graph API和Windows Azure Active Directory资源的作用域。我们使用的是v1 OpenID身份验证代码流。 最近,我们在Microsoft Graph API中添加了一些请求的作用域,我们提示用户使用prompt=admin\u approve和资源重新授权=https://graph.microsoft.com在我们的/common/oauth2/token交换上 当提示用户再次接受作用域时
最近,我们在Microsoft Graph API中添加了一些请求的作用域,我们提示用户使用
prompt=admin\u approve
和资源重新授权=https://graph.microsoft.com
在我们的/common/oauth2/token
交换上
当提示用户再次接受作用域时,您可以看到新请求的作用域,并且调用似乎成功完成,我们将收到一个新的access\u令牌
但是,响应中返回的作用域和嵌入的JWT作用域声明只列出了请求的作用域的一小部分,而且它们似乎只来自其中一个资源(Windows Azure Active Directory)
我们收到新范围的403,因此我认为这不是没有正确填充这些范围字段的问题
有人知道为什么身份验证流不会返回带有新请求作用域的令牌吗?
以下是我请求的作用域列表:
Microsoft Azure Active Directory
- 读取和写入目录数据(应用程序)
- 以登录用户身份访问目录(委派)
- 读取和写入目录数据(委托)
- 登录并读取用户配置文件(委派)
微软图形
- 在所有邮箱中读写日历(应用程序)(新)
- 读取和写入所有用户的完整配置文件(应用程序)
- 读取和写入目录数据(应用程序)
- 以任何用户身份发送邮件(应用程序)(新)
谢谢 通过指定特定资源对AAD v1发出令牌请求时,返回的访问令牌将仅包含访问该特定资源所需的作用域。协议的细节和示例已记录在案
因此,如果需要访问两个资源,则需要为每个资源请求访问令牌,并且相应的令牌将包含特定于该资源的作用域
在这种情况下,如果AAD图形范围在MS Graph中可用,则可以将它们合并到MS Graph下,并为MS Graph请求单个令牌。在身份验证流程中,您可以通过在参数说明中提到的身份验证请求的scope
字段中指定这些作用域来控制要请求同意的作用域。当您请求ID令牌时,您是请求特定资源还是将其留空?在使用普通用户进行测试之前,您是否让管理员通过管理员同意流程?我们没有在/common/oauth2/authorize
上指定资源,但我们会发送资源=https://graph.microsoft.com/common/oauth2/token
调用上的(如果未指定,我们将从端点获得400)。是的,我们让用户在下次登录时使用prompt=admin\u approve
重新授权。prompt=admin\u approve
强制管理员同意流,prompt=approve
用于强制用户同意。它们是不同的东西。您是否尝试过prompt=approve
?如果我请求应用程序作用域,为了脱机使用它们,我希望管理员正确地接受这些作用域?我尝试了prompt=approve
而不是prompt=admin\u approve
。原来的问题没有区别。新的作用域仍然不在响应主体或JWT令牌中。