Azure active directory 带有Web API和Microsoft Graph的Azure应用程序

Azure active directory 带有Web API和Microsoft Graph的Azure应用程序,azure-active-directory,microsoft-graph-api,Azure Active Directory,Microsoft Graph Api,我已经在注册了Web应用程序和API。在我的API中,我添加了预授权应用程序我的Web应用程序ID。到目前为止,一切都很好。它在以下范围内工作:openid、profile和api://APP_ID_GUID/access_as_user 我还需要访问Microsoft Graph,但需要添加https://graph.microsof.com/user.read对我的作用域执行以下操作: AADSTS700022:为输入参数范围提供的值无效,因为它包含多个资源。范围openidprofileh

我已经在注册了Web应用程序和API。在我的API中,我添加了预授权应用程序我的Web应用程序ID。到目前为止,一切都很好。它在以下范围内工作:
openid
profile
api://APP_ID_GUID/access_as_user

我还需要访问Microsoft Graph,但需要添加
https://graph.microsof.com/user.read
对我的作用域执行以下操作:

AADSTS700022:为输入参数范围提供的值无效,因为它包含多个资源。范围
openid
profile
https://graph.microsoft.com/user.read
api://APP_ID_GUID/access_as_user
无效


我怎样才能得到代币,这样我就可以同时使用这两种代币?我只需要列出Active Directory中的用户。我看到它的唯一方法是为Microsoft Graph获取一个单独的访问令牌,并在我想从AD查询用户时使用它。

访问令牌仅在一个API上有效。 您需要两个访问令牌来调用两个API

只要你的应用程序获得了必要的许可,
它可以通过使用刷新令牌(您可以使用刷新令牌获取任何资源的访问令牌)或使用隐式授权流(MSAL.JS使用)的隐藏iframe来获取访问令牌。

访问令牌仅在一个API上有效。 您需要两个访问令牌来调用两个API

只要你的应用程序获得了必要的许可,
它可以通过使用刷新令牌(您可以使用刷新令牌获取任何资源的访问令牌)或使用隐式授权流(MSAL.JS使用)的隐藏iframe来获取访问令牌.

您还应该能够通过使用
user.read
而不是
https://graph.microsoft.com/user.read
。当你使用这样一个完全限定的作用域时,你就把它锁定在一个资源上了。顺便问一下,如果一个人想要获得多个资源的同意,那可能吗?我理解令牌获取的错误,但对于身份验证和同意,应该可以指定多个资源:/至少在过去,它不起作用。我知道您可以使用v1令牌来实现这一点,但我不确定v2。我会调查一下,看看是否能找到一个明确的答案。可能您需要先单独执行同意工作流?@juunas请求API权限(例如,
https://graph.microsoft.com/.default
)将触发对应用程序静态定义的所有权限和所有资源的同意提示。如果授予同意,则生成的令牌将包含您在请求中使用的资源的所有权限。对其他资源的后续请求将不再触发同意。对,因此,正确的应用程序方法是静态包含所有强制权限,然后仅在启用可选功能时使用动态权限。您还应该能够通过使用
user.read
而不是
https://graph.microsoft.com/user.read
。当你使用这样一个完全限定的作用域时,你就把它锁定在一个资源上了。顺便问一下,如果一个人想要获得多个资源的同意,那可能吗?我理解令牌获取的错误,但对于身份验证和同意,应该可以指定多个资源:/至少在过去,它不起作用。我知道您可以使用v1令牌来实现这一点,但我不确定v2。我会调查一下,看看是否能找到一个明确的答案。可能您需要先单独执行同意工作流?@juunas请求API权限(例如,
https://graph.microsoft.com/.default
)将触发对应用程序静态定义的所有权限和所有资源的同意提示。如果授予同意,则生成的令牌将包含您在请求中使用的资源的所有权限。对其他资源的后续请求将不再触发同意。对,因此应用程序的正确方法是静态包含所有强制权限,然后仅在启用可选功能时使用动态权限。