Azure active directory Graph API的Azure API权限

Azure active directory Graph API的Azure API权限,azure-active-directory,microsoft-graph-api,openid-connect,azure-api-apps,Azure Active Directory,Microsoft Graph Api,Openid Connect,Azure Api Apps,上下文 对于一个需要使用私有Azure API的情况,让我们称之为MYTESTAPI。MYTESTAPI包含几个作用域,因此它能够访问我们的.net核心API。这非常有效,因为我正在通过以下方式发出令牌请求: api://{clientid}/mytestapi.scope 我正在取回一个令牌,用这个令牌我可以访问我们的API。我有一个带有外部库的Angular客户端,名为Angular oauth oidc客户端。当我使用(不推荐)隐式流和静默更新时,它一直工作到扩展 现在我已经设置了Ang

上下文

对于一个需要使用私有Azure API的情况,让我们称之为MYTESTAPI。MYTESTAPI包含几个作用域,因此它能够访问我们的.net核心API。这非常有效,因为我正在通过以下方式发出令牌请求:

api://{clientid}/mytestapi.scope
我正在取回一个令牌,用这个令牌我可以访问我们的API。我有一个带有外部库的Angular客户端,名为Angular oauth oidc客户端。当我使用(不推荐)隐式流和静默更新时,它一直工作到扩展

现在我已经设置了Angular应用程序,所以我正在通过Azure广告连接到我们的私有API。但问题是,我也需要获取用户信息。这来自https://graph.microsoft.com/oidc/userinfo'. 所以我试着添加:openid,profile到scopes中,这样我就可以使用graphapi来获取基本的概要信息

scopes: 'openid profile api://{clientid}/mytestapi.scope' 
当我解码生成的令牌时,我没有看到添加到“scp”部分的openid或概要文件。userinfo请求返回401:Unauthorized。似乎我需要在Azure Portal中配置一些东西来实现这一点

我可能的解决方案是以“mytestapi.scope”将授予访问graph API部分的权限的方式配置azure API

请随意询问任何必要的上下文或问题

问题:

  • 甚至有可能向私有API授予图形权限吗?如果有,建议这样做还是有更好的解决方案?如何解决

是的,如果可以将graph api权限授予您的api,您可以使用所谓的代表流进行身份验证。下面是关于流程的文档 微软没有直接在angular上做这件事的例子 然而,在react中有一个在概念上类似的示例

本质上,在您的私有api中,您需要向其添加graph api权限。公开API,然后在请求作用域时从客户端请求公开API的.default作用域。
这绝对是一个受支持的场景,使用起来非常安全。至于客户端,您也可以获得graph的作用域,我只是相信,当您在获取访问令牌时重新测试作用域时,一次只能请求一个API的作用域。您可以一次获得多个图形作用域,但不能在同一请求下获得一个图形作用域和一个私有api作用域

Alphaz18的答案是正确的,因此将其标记为已接受的答案:

  • 自定义API中的调用图API
  • 从用户界面调用的自定义API公开API端点
如果有帮助的话,这里有一些我的视觉资源可以做同样的事情。Azure的广告行为不是很直观,我花了一段时间才让它工作起来