图形 API 的 Azure API 权限

Posted

技术标签:

【中文标题】图形 API 的 Azure API 权限【英文标题】:Azure API permissions for Graph 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?如果可以,是否有更好的解决方案?

【问题讨论】:

【参考方案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 的行为虽然不是很直观,但我花了一段时间才让它工作。

Blog Post - see Steps 14 to 18 NodeJS Code to get User Info

【讨论】:

以上是关于图形 API 的 Azure API 权限的主要内容,如果未能解决你的问题,请参考以下文章

来自不同租户的 Azure AD 同意

如何以编程方式获取 Azure AD 应用程序的 Graph API 权限指南?

通过Rest API或客户端DLL创建具有'Contributors'类的Azure Devops(安全)组,并具有权限

没有 user_impersonation 的 Azure 资源管理 API,可以吗?

所有 Azure 资源的 RBAC 权限列表

Facebook API SDK撤销访问权限