将Azure Active Directory组添加到声明
我们正在将一个由Angular前端和运行在.NET Framework 4.6.2上的ASP.NET Core 2.1 Web Api后端组成的应用程序从本地迁移到Azure 应用程序使用Active Directory组进行授权 为了简化迁移过程,我们希望使用同步到Azure Active Directory的相同组 身份验证工作正常,但当我检查Web Api控制器中用户对象中的声明时,我在其中找不到任何组声明 我在User对象中看到的唯一一个与组相关的声明是一个名为“hasGroups”的声明,其值为true,但我需要知道用户属于哪些组 我知道我可以通过Graph API查询广告,但如果服务可以直接提供这些信息,我更喜欢无缝方式 更新:我在Angular Frontend中使用MSAL 1.0和隐式流对用户进行身份验证,并获得一个访问令牌来验证对Web Api的调用 更新2: 这是后端api的配置:将Azure Active Directory组添加到声明,azure,asp.net-core,azure-active-directory,msal,Azure,Asp.net Core,Azure Active Directory,Msal,我们正在将一个由Angular前端和运行在.NET Framework 4.6.2上的ASP.NET Core 2.1 Web Api后端组成的应用程序从本地迁移到Azure 应用程序使用Active Directory组进行授权 为了简化迁移过程,我们希望使用同步到Azure Active Directory的相同组 身份验证工作正常,但当我检查Web Api控制器中用户对象中的声明时,我在其中找不到任何组声明 我在User对象中看到的唯一一个与组相关的声明是一个名为“hasGroups”的声
- 我在“令牌配置”页面中应用了以下配置
- 我在“证书和机密”页面中创建了一个客户端机密
- 我在“公开API”选项卡中创建了一个作用域,并将客户端应用程序添加到其中
- 我添加了API权限
更新3:我已将后端升级到.net 5,但仍然可以重现问题(索赔收集中没有角色)。根据我的理解,您希望获取当前登录用户作为令牌索赔的所有组。 看起来您的方向是正确的,但请确保您正在配置ASP.NET Core 2.1 Web Api Azure AD应用程序,而不是您的Angular Frontend Azure AD应用程序 我还做了一些测试,这是我对ASP.NET Core 2.1 Web Api Azure AD应用程序的令牌配置: 我调用Azure AD
/token
端点来模拟用户登录:
客户端ID为Angular前端Azure AD应用程序ID,此处的ASP.NET Core 2.1 Web Api Azure AD应用程序为01abd597-4b2f-478e-bbb1-6D875909346
解析令牌:
如您所见,组声明已添加到令牌中
如果你有任何问题,请告诉我
更新请求结果:
根据我的理解,您希望获得当前登录用户作为令牌声明的所有组。 看起来您的方向是正确的,但请确保您正在配置ASP.NET Core 2.1 Web Api Azure AD应用程序,而不是您的Angular Frontend Azure AD应用程序 我还做了一些测试,这是我对ASP.NET Core 2.1 Web Api Azure AD应用程序的令牌配置: 我调用Azure AD
/token
端点来模拟用户登录:
客户端ID为Angular前端Azure AD应用程序ID,此处的ASP.NET Core 2.1 Web Api Azure AD应用程序为01abd597-4b2f-478e-bbb1-6D875909346
解析令牌:
如您所见,组声明已添加到令牌中
如果你有任何问题,请告诉我
更新请求结果:
在我看来,主要问题是,我试图登录的用户是5个以上组的一部分。在本例中,这些组不会添加到声明中,而是我只得到提到的“hasGroups”条目 把我引向这个方向
因此,如果您的用户可能有5个以上的广告组,您必须使用MS Graph手动查询这些组,或者找到另一个地方来存储您的组。在我看来,主要问题是,我尝试登录的用户属于5个以上的组。在本例中,这些组不会添加到声明中,而是我只得到提到的“hasGroups”条目 把我引向这个方向
因此,如果您的用户可能有5个以上的广告组,您必须使用MS Graph手动查询这些组,或者找到另一个地方来存储您的组。谢谢您的帖子!您能否详细说明“确保您正在配置ASP.NET Core 2.1 Web Api Azure广告应用程序,而不是您的Angular Frontend Azure广告应用程序”的含义?我刚刚在AD中创建了一个应用程序,它被前端和Web Api使用。我使用隐式流来验证SPA。我分析了ID令牌和访问令牌,但缺少组数组。当我尝试您通过邮递员建议的请求时(仅替换路径中的租户名称和请求正文中的值),我返回了400个错误请求-无效主机名。(已经仔细检查了拼写)@MarkusS。在此场景中,您应该创建2个Azure广告应用程序,一个代表前端应用程序,另一个代表后端API。对于您得到的错误,请分享您的整个请求和错误messages@MarkusS. 是的,对于前端和后端分离应用程序,您应该注册Azure广告应用程序来展示每个应用程序(前端应用程序和后端API)。@MarkusS。这真的很奇怪,我不能站在我这边反驳你的问题。我已经根据你的描述在我的答案末尾附上了请求结果。谢谢你的帖子!您能否详细说明“确保您正在配置ASP.NET Core 2.1 Web Api Azure广告应用程序,而不是您的Angular Frontend Azure广告应用程序”的含义?我刚刚在AD中创建了一个应用程序,它被前端和Web Api使用。我使用隐式流来验证SPA。我分析了ID令牌和访问令牌,但缺少组数组。当我尝试您通过邮递员建议的请求时(仅替换路径中的租户名称和请求正文中的值),我返回了400个错误请求-无效主机名。(已经仔细检查了拼写)@MarkusS。在这个场景中,您应该创建