Azure Graph API,Angular,获取用户组

Azure Graph API,Angular,获取用户组,angular,azure,azure-ad-b2c,azure-ad-graph-api,msal,Angular,Azure,Azure Ad B2c,Azure Ad Graph Api,Msal,我想查询Azure AD Graph API,从注册的Azure B2C应用程序中检索登录用户的组声明。我打电话的应用程序是Angular 5 SPA 在试用Azure Active Directory和adal-angular4之后,我成功地检索到用户的自定义角色声明。为此,我注册了一个Azure AD应用程序,设置了所需的权限范围,将自定义角色添加到应用程序的清单中,将用户添加到应用程序中,并为用户设置自定义角色。然后,我使用新注册应用程序的应用程序id和租户进行adal-angular4配

我想查询Azure AD Graph API,从注册的Azure B2C应用程序中检索登录用户的组声明。我打电话的应用程序是Angular 5 SPA

在试用Azure Active Directory和adal-angular4之后,我成功地检索到用户的自定义角色声明。为此,我注册了一个Azure AD应用程序,设置了所需的权限范围,将自定义角色添加到应用程序的清单中,将用户添加到应用程序中,并为用户设置自定义角色。然后,我使用新注册应用程序的应用程序id和租户进行adal-angular4配置。当我查询端点时,我得到了包含角色声明的令牌。它工作得很好。当我更改它在令牌中显示的角色时

这个角色声明对我来说已经足够了,但它需要两个登录,一个用于我的B2C应用程序,另一个用于我的其他注册应用程序。我想我不能对这两个都使用相同的令牌

为了只有一个登录,我想直接查询Azure B2C。我听说它不提供查询用户角色(如Azure Active Directory)的功能,并且已被指示使用用户组。我还看过文档,并被告知我需要使用Azure Graph API,因为Microsoft Graph尚未实现查询此信息的功能

我试图遵循与AAD类似的B2C路径。我创建了一个组并向该组添加了一个用户。我曾尝试使用MSAL.js使用Azure Graph API端点访问我的B2C应用程序的信息,但我收到错误“代码”:“Authentication\u MissingOrMalformed”。我验证了MSAL检索到一个令牌并将其添加到请求中。当我将url更改为无效的url时,会出现相同的错误。我搜索并找到了同样问题的问题,但没有一个得到回答

如何修复此错误?

是否需要有本地管理员帐户?

我是否需要在我的B2C应用程序上设置任何特殊作用域来授权我的查询?如果有,具体是什么?我尝试将作用域的不同值交换到MSAL配置中,但没有找到任何有效的方法

此应用程序需要是多租户吗?


我在和上找到了资源,但我使用的是Angular 5/typescript,没有.NET中提供的Azure AD Graph客户端库。我无法使用这两种资源。

Azure AD B2C使用Azure AD v2.0端点发布令牌:

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize
https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
https://login.microsoftonline.com/{tenant}/oauth2/token
Azure AD Graph API需要使用Azure AD v1.0端点发布的令牌:

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize
https://login.microsoftonline.com/{tenant}/oauth2/v2.0/token
https://login.microsoftonline.com/{tenant}/oauth2/token
对于要访问Azure AD Graph API的单页应用程序,必须使用代理API(我将其称为用户API)桥接它们,如下所示

在设计时:

  • 使用Azure AD B2C门户注册单页应用程序
  • 在运行时:

  • 单页应用程序将最终用户重定向到Azure AD B2C v2.0端点以进行登录。Azure AD B2C发布包含用户标识符的ID令牌
  • 单页应用程序使用此ID令牌调用用户API。用户API验证ID令牌
  • 用户API使用在步骤2中设计时创建的应用程序凭据从Azure AD v1.0端点获取访问令牌
  • 用户API调用Azure AD Graph API,传递在步骤2中接收到的用户标识符以及在步骤3中发出的访问令牌,查询组成员资格,然后将其返回给单页应用程序

  • 我想写这篇文章是为了帮助其他人,他们可能会陷入与我试图找到一个基本方向/理解相同的套路。我基本上遵循了@Chris Pradget描述的工作流程。不过,我最初对这个问题的看法是错误的,我将澄清我的错误所在,并给出一点背景

    我最初的目标是在用户登录到我的Azure/Angular应用程序时提供用户的角色和/或组声明。当您使用Azure B2C登录以获取策略时,Azure没有一种简单的方法可以做到这一点。(在某些方面,Firebase似乎使这变得容易)

    经过一系列的研究,并没有真正理解全局,我看到了似乎相互矛盾的信息,这需要一些时间来整理。最终我找到了我要找的信息,那就是我不能只有一个登录名

    (只是提醒一下,我将我的经典Azure广告注册应用称为“应用注册”,只是为了区别Azure门户中的代码实现和配置设置)

    这需要很多实验,但我想出了一些似乎有效的方法。我基本上检索了3个令牌,其中2个是使用MSAL.js在Angular中检索的,另一个是使用ADAL for Microsoft Graph在.NET中检索的。其中一个用于初始登录(MSAL客户端的LoginDirect调用)以检索id_令牌,另一个用于我使用该令牌以及AquiretokenClient函数检索的访问_令牌。我将其发送到我的.NET Core后端,在那里我使用传入令牌中的用户id作为资源id,以获取我的组声明,然后我将声明发送回Angular,以用于我的路由守卫

    我研究中值得注意的事情:

    Azure AD Graph vs Microsoft Graph拉取用户组:关于使用哪一个用户组,有人说Microsoft Graph是因为Azure Graph已被弃用,但也有人说Azure Graph是因为MS Graph尚未涵盖所有基础。经过实验,我发现我能够从MS图形中提取用户的组。考虑到这一点以及MS Graph较新的事实,我选择了MS Graph。对于图形的实验,我使用了和

    我花了一段时间才成功地查询了Microsoft Graph,但是