Azure AD不会发出组声明

时间:2017-03-14 15:10:58

标签: .net azure active-directory

我正在尝试通过群组为我的应用程序设置基于角色的访问权限。我已经关注了以下文章(很抱歉发布了代码链接,不允许发布超过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上向app添加了相关组(假设该组至少包含一个用户) 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);
            }

4 个答案:

答案 0 :(得分:1)

问题解决了。我正在咆哮错误的应用程序配置文件。我的AD注册了许多应用程序(沙盒,测试等)。事实证明我正在编辑错误的个人资料。我在问题中提到的步骤确实有效。感谢@Fei Xue - MSFT的时间和帮助。

答案 1 :(得分:0)

由于您在应用程序的清单中指定了SecurityGroup,因此Azure AD仅发出此类型组声明。您可以将SecurityGroup更改为All,以使Azure AD发布各种群组声明。

并且还要确保用户是少于150个组的成员,因为组的数量有限(请参阅here)。

并确保已为用户登录Web应用程序分配了该组。您可以参考代码示例active-directory-dotnet-webapp-groupclaims来显示群组声明。

答案 2 :(得分:0)

我在这里遇到的另一个问题是:耐心!

将清单中的groupMembershipClaims从null更改为SecurityGroup之后,您需要等待它。有时可能需要一个小时。我以为我错过了权限等等,但是只要登录的用户可以访问AD中的读取组(通常是这样做的),就不需要额外的权限。

因此要获得与Azure AD一起使用的组授权:

  1. 打开Visual Studio
  2. 创建一个新的Web应用程序
  3. 选择身份验证-选择“工作”或“学校”帐户(保留“读取”目录) 空白)
  4. 转到Azure AD中的新应用->应用注册并 在清单文件中将groupMembershipClaims更改为SecurityGroup并保存。
  5. 等待至少一个小时。
  6. 测试您是否要分组 通过将其放入索引文件来声明:

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

答案 3 :(得分:0)

我遇到了类似的问题,即没有将组作为索赔退还。

要解决此问题,我做了两件事:

  • 在Azure AD,应用程序注册,[用于访问AD的应用程序注册表],令牌配置下,有一个按钮:“添加组声明”。我打勾了所有的框。我可以确认此步骤是必需的。

  • 在同一屏幕上,左侧菜单还具有“ API权限”。最初我只有“ User.Read”。我有“ User.ReadAll”,“ Directory.Read”和“ Directory.ReadAll”。我已经在其他步骤之前完成了此操作,所以我不确定是否有必要。