Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Azure Active Directory组添加到声明_Azure_Asp.net Core_Azure Active Directory_Msal - Fatal编程技术网

将Azure Active Directory组添加到声明

将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”的声

我们正在将一个由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的配置:

  • 我在“令牌配置”页面中应用了以下配置

  • 我在“证书和机密”页面中创建了一个客户端机密

  • 我在“公开API”选项卡中创建了一个作用域,并将客户端应用程序添加到其中

  • 我添加了API权限

在前端应用程序中,我激活了身份验证页面中的“访问令牌”和“ID令牌”选项: 我在同一页上配置了重定向url


更新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。在这个场景中,您应该创建