Azure AD不发出组声明

4zcjmb1e  于 2023-01-27  发布在  其他
关注(0)|答案(5)|浏览(114)

我正在尝试通过Azure上的应用程序组设置基于角色的访问权限。我关注了以下文章(抱歉以代码形式发布链接,不允许发布超过1个链接)。但是,我的应用程序没有收到任何组声明。

https://www.simple-talk.com/cloud/security-and-compliance/azure-active-directory-part-4-group-claims/

http://www.dushyantgill.com/blog/2014/12/10/roles-based-access-control-in-cloud-applications-using-azure-ad/

"我所做的一切"

清单文件

"appId": "d754a979-689d-45f8-8c63-983de55840da"
"appRoles": [
    {
      "allowedMemberTypes": [
        "User"
      ],
      "displayName": "Manager",
      "id": "1e06dae5-467a-40cf-a9a6-14baf3969472",
      "isEnabled": true,
      "description": "Manages",
      "value": "Manager"
    },
    {
      "allowedMemberTypes": [
        "User"
      ],
      "displayName": "Issuer",
      "id": "da85f458-720d-4c09-861f-92f5c465ee3e",
      "isEnabled": true,
      "description": "Issues",
      "value": "Issuer"
    },
    {
      "allowedMemberTypes": [
        "User"
      ],
      "displayName": "Supervisor",
      "id": "d64807d4-6e12-4637-a049-2a61b250507b",
      "isEnabled": true,
      "description": "Can perform any function",
      "value": "Supervisor"
    }
  ],
  "availableToOtherTenants": false,
  "displayName": "traffic",
  "errorUrl": null,
  "groupMembershipClaims": "SecurityGroup",
  "homepage": "https://myapp.ca",
  "identifierUris": [
    "https://myapp.azurewebsites.net/"
  ],

还添加了Azure上应用程序的相关组(假设该组至少包含一个用户)Groups Assignment on Azure
但是我的应用程序中没有任何群组声明。下面的代码总是导致计数为零。有什么想法吗?提前感谢。

var claims = ClaimsPrincipal.Current.Claims.Where(c => c.Type == "groups");

            Debug.Print("Total Group Claims in HomeController #### "+claims.Count());

            foreach (Claim c in claims)
            {
                Debug.Print("%%%%%%%% " + c.Value + " %%% VALUETYPE %%% " + c.Type);
            }
xcitsw88

xcitsw881#

问题解决了。我选错了应用程序配置文件。有很多应用程序注册到我的AD(沙盒,测试等)。原来我编辑了错误的配置文件。我在问题中提到的步骤确实有效。感谢@Fei Xue - MSFT的时间和帮助。

0g0grzrc

0g0grzrc2#

我在这里遇到的另一个问题是好老:耐心点!
在您将清单中的groupMembershipClaims从null更改为SecurityGroup之后,您需要等待它..有时长达一个小时。我以为我错过了权限之类的东西,但只要登录的用户有权从AD读取组(他们通常这样做),就不需要额外的权限。
因此,要获得使用Azure AD的组授权:
1.打开Visual Studio
1.创建新的Web应用
1.选择身份验证-选择工作或学校帐户(将“读取”目录留空)
1.转到Azure AD中的新应用-〉应用注册,然后在清单文件中将groupMembershipClaims更改为SecurityGroup并保存。
1.等待至少一个小时。
1.通过将以下内容放入索引文件中,测试您是否正在获取组声明:

<table class="table">
    @foreach (var claim in User.Claims)
    {
        <tr>
            <td>@claim.Type</td>
            <td>@claim.Value</td>
        </tr>
    }
    </table>
6tqwzwtp

6tqwzwtp3#

我有一个类似的问题,群体没有被归还的索赔。
为了弥补我做了两件事

  • 在Azure AD、应用程序注册、[用于访问AD的应用程序注册]、令牌配置下,有一个按钮:“添加组索赔”。我勾选了所有的框。我可以确认这一步是必要的。
  • 在同一屏幕中,左侧菜单还具有“API权限”。最初我只有“用户.读取”。我有“用户.读取全部”、“目录.读取”和“目录.读取全部”。我在其他步骤之前已经这样做了,所以我不确定是否有必要。
xzlaal3s

xzlaal3s4#

由于你在应用程序的清单中指定了SecurityGroup,因此Azure AD仅发出此类类型的组声明。你可以将SecurityGroup更改为All,以使Azure AD发出所有类型的组声明。
并且还确保用户是少于150个组的成员,因为存在组的数量限制(参考here)。
并确保登录web应用的用户已经被分配了组。您可以参考代码示例active-directory-dotnet-webapp-groupclaims来显示组声明。

14ifxucb

14ifxucb5#

如果您在“单点登录”页面的关联企业应用程序中配置了组过滤,请确保过滤器与您的用户所属的组匹配。
非常奇怪的是,本主题中描述了组过滤功能。https://learn.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-fed-group-claims#group-filtering

相关问题