【问题标题】:Returning AD group membership from ACS从 ACS 返回 AD 组成员资格
【发布时间】:2014-05-15 14:21:12
【问题描述】:

这是我在这里的第一篇文章,所以请对我温柔一点! :)

我正在尝试使用 Azure ACS(即 Office 365)作为身份验证系统来开发应用程序。事物的身份验证方面似乎运行良好,我被重定向到 Office 365 登录页面并且可以成功登录。然后我的代码使用 Graph API 获取有关该用户的其他信息。

我正在努力获取登录人所属的 AD 组的列表。当我请求组列表时,仅取回 Office 365 安全角色。

这是我所做的(我希望我已经包含了所有相关的内容)

从 Azure 内部;

  • 进入活动目录
  • 选择了我的域(来自本地 AD 的 DirSync)
  • 创建了一个新应用程序
  • 允许读取目录数据并启用登录和读取用户配置文件
  • 创建了一个新密钥

在我的测试应用中;

  • 创建了一个新的 Web 应用程序(标准 Web 表单)
  • 使用身份和访问设置来指定“用户提供企业身份”
  • 将 clientID 和密码添加到 app.settings 文件中
  • 添加了 Windows Azure Active Directory Graph Helper 项目

这是我的相关代码

        IPrincipal myPrincipal = this.User;

        //get the tenantName
        string tenantName = ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/tenantid").Value;

        // retrieve the clientId and password values from the Web.config file
        string clientId = Properties.Settings.Default.ClientID;
        string password = Properties.Settings.Default.Password;

        // get a token using the helper
        AADJWTToken token = DirectoryDataServiceAuthorizationHelper.GetAuthorizationToken(tenantName, clientId, password);

        // initialize a graphService instance using the token acquired from previous step
        DirectoryDataService graphService = new DirectoryDataService(tenantName, token);

        User myUser = graphService.users.Where(it => (it.userPrincipalName == myPrincipal.Identity.Name)).SingleOrDefault();
        graphService.LoadProperty(myUser, "memberOf");
        List<Role> currentRoles = myUser.memberOf.OfType<Role>().ToList();

当我运行我的代码时,currentRoles 只包含“公司管理员”而不是我所属的其他组。

我已经阅读了很多关于如何通过命名空间添加规则的文章,但这似乎与使用 Windows ACS 有关。

我可能错过了一个非常基本的步骤,并且会永远感激朝着正确方向轻推:)

谢谢, 达伦

【问题讨论】:

    标签: c# authentication azure adfs2.0 acs


    【解决方案1】:

    假设您的代码很好(仅使用 sn-p 很难判断),您的主要问题是您使用的是 Role 而不是 Group。角色和组是图中的不同概念。 Graph 返回的 Role 不适用于基于角色的访问控制 (RBAC),而 Group 可以(并且应该)用于该目的。 See my other answer here for more information.

    此外,在不了解应用程序需求的情况下,只有在需要向多个身份提供者进行身份验证时才应使用 ACS。看起来您只是将 Azure AD 用作您的 IdP,因此您可以直接对服务进行身份验证,而不是使用 ACS 作为中间人。

    Azure AD 中的This topic about authorization and RBACaccompanying code sample 应该可以帮助您更多地了解如何在 Azure AD 和 Graph 中使用角色和组。

    【讨论】:

    • 谢谢肖恩。我将 Role 的最后一行代码更改为 Group,这很有效。我认为在玩了几个小时的代码之后,我的大脑已经将角色和组混合在一起(这绝不是一个好主意)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 2023-02-03
    • 2021-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多