Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure mulit租户应用程序未获取具有新定义作用域的令牌_Azure_Oauth 2.0_Azure Active Directory_Microsoft Graph Api_Azure Ad Graph Api - Fatal编程技术网

Azure mulit租户应用程序未获取具有新定义作用域的令牌

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交换上 当提示用户再次接受作用域时

我正在开发一个Azure多租户应用程序,它使用来自Microsoft Graph API和Windows Azure Active Directory资源的作用域。我们使用的是v1 OpenID身份验证代码流。


最近,我们在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令牌中。