【问题标题】:Azure API permissions for Graph API图形 API 的 Azure API 权限
【发布时间】:2020-10-22 20:20:50
【问题描述】:

上下文

对于我需要使用私有 Azure API 的情况,我们称之为 MYTESTAPI。 MYTESTAPI 包含一些范围,因此它能够访问我们的 .net 核心 API。这很好用,因为我正在使用以下方式发出令牌请求:

api://{clientid}/mytestapi.scope

我得到了一个令牌,我可以使用令牌访问我们的 API。我有一个带有名为 angular-oauth-oidc-client 的外部库的 Angular 客户端。当我使用(不推荐的)隐式流程和静默更新时,这一直有效。

现在我已经设置了我的 Angular 应用程序,因此我正在通过 Azure AD 连接到我们的私有 API。但问题是,我也需要获取 UserInfo。这来自“https://graph.microsoft.com/oidc/userinfo”。所以我试图做的是添加:openid, profile 到范围,这样我就可以使用图形 API 来获取基本的配置文件信息。

scopes: 'openid profile api://{clientid}/mytestapi.scope' 

当我解码生成的令牌时,我没有看到 openid 或配置文件添加到“scp”部分。并且 userinfo 请求返回 401:未授权。看来我需要在 Azure 门户中配置一些东西才能使它工作。

我可能的解决方案是配置 azure API,让“mytestapi.scope”授予访问部分图形 API 的权限。

随时提出任何需要的上下文或问题。

问题:

  • 是否可以将图形权限授予私有 API?如果可以,是否有更好的解决方案?

【问题讨论】:

    标签: azure-active-directory microsoft-graph-api openid-connect azure-api-apps


    【解决方案1】:

    是的,可以向您的 api 授予图形 api 权限,您将使用所谓的代表流进行身份验证。这是有关流程https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-oauth2-on-behalf-of-flow 的文档 微软没有直接的样本来做角度 但是有一个在 react 中执行此操作的示例,它在概念上是相似的。 https://github.com/Azure-Samples/ms-identity-javascript-react-spa-dotnetcore-webapi-obo

    本质上,在您的私有 api 中,您需要为其添加图形 api 权限。公开 API,然后在请求范围时从客户端请求公开 api 的 .default 范围。 这绝对是一个受支持的场景,使用起来非常安全。至于客户端,您也可以获得图形的范围,我只是相信当您在获取访问令牌时请求范围时,您一次只能请求一个 API 的范围。例如。您可以一次获取多个图形范围,但不能在同一请求中获取图形范围和私有 api 范围。 https://github.com/AzureAD/microsoft-authentication-library-for-js/issues/508#issuecomment-451527718

    【讨论】:

      【解决方案2】:

      Alphaz18 的答案是正确的,所以标记为接受的答案:

      • 从您的自定义 API 调用 Graph API
      • 从您的 UI 调用的自定义 API 中公开一个 API 端点

      如果有帮助,这里有一些我的视觉资源可以做同样的事情。 Azure AD 的行为虽然不是很直观,但我花了一段时间才让它工作。

      【讨论】:

        猜你喜欢
        • 2020-05-09
        • 2012-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-10
        • 2020-04-10
        • 1970-01-01
        相关资源
        最近更新 更多