【问题标题】:Azure App with Web API and Microsoft Graph带有 Web API 和 Microsoft Graph 的 Azure 应用
【发布时间】:2018-12-17 14:14:21
【问题描述】:

我在 https://apps.dev.microsoft.com 注册了 Web 应用程序和 API。在我的 API 中,我在 预授权应用程序 中添加了我的 Web APP ID。到现在为止还挺好。它适用于以下范围:openidprofileapi://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 查询用户时使用它。

【问题讨论】:

    标签: azure-active-directory microsoft-graph-api


    【解决方案1】:

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

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

    【讨论】:

    • 您还应该能够通过使用user.read 而不是https://graph.microsoft.com/user.read 来克服范围错误本身。当您使用这样的完全限定范围时,您会将其锁定到单个资源。
    • 顺便问一下,Marc,如果有人想就多个资源征求同意,这可能吗?我理解令牌获取的错误,但对于身份验证和同意,应该可以指定多个资源:/至少在过去它不起作用。
    • 我知道您可以使用 v1 令牌做到这一点,但是我不确定 v2。我会调查一下,看看我是否能找到明确的答案。可能是需要先单独执行consent工作流程?
    • @juunas 为属于 API 权限的任何资源(例如 https://graph.microsoft.com/.default)请求 .default 权限将触发对 all 权限的同意提示,并且为应用程序静态定义的所有资源。如果同意,生成的令牌将包含您在请求中使用的资源的所有权限。对其他资源的后续请求将不再触发同意。
    • 对,所以应用程序的正确做法是静态包含所有强制权限,然后仅使用动态权限来启用可选功能。
    猜你喜欢
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2017-12-10
    相关资源
    最近更新 更多