从 ACS 返回 AD 组成员身份
本文关键字:组成员 身份 AD 返回 ACS | 更新日期: 2023-09-27 17:56:22
这是我在这里的第一篇文章,所以请对我温柔一点! :)
我正在尝试开发一个使用 Azure ACS(即 Office 365)作为身份验证系统的应用程序。 身份验证方面似乎工作得很好,我被重定向到 Office 365 登录页面并且可以成功登录。 然后,我的代码使用图形 API 获取有关该用户的其他信息。
我正在努力的是获取登录者所属的 AD 组的列表。 当我请求组列表时,仅取回 Office 365 安全角色。
这是我所做的(我希望我已经包含了所有相关内容)
从蔚蓝内部;
- 进入活动目录
- 已选择我的域(从本地 AD 进行目录同步)
- 创建了一个新应用程序
- 允许读取目录数据和启用登录和读取用户的配置文件
- 已创建新密钥
从我的测试应用程序中;
- 创建了一个新的 Web 应用程序(标准 Web 窗体)
- 使用身份和访问设置指定"企业身份提供的用户"
- 将客户端 ID 和密码添加到应用程序设置文件
- 添加了 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();
当我运行我的代码时,当前角色仅包含"公司管理员",而不包含我所属的其他组。
我已经阅读了许多有关如何通过命名空间添加规则的文章,但这似乎与使用 Windows ACS 有关。
我可能错过了一个非常基本的步骤,并且永远感激朝着正确的方向推动:)
谢谢达伦
假设你的代码很好(很难用片段来判断),你的主要问题是你使用的是Role
而不是Group
。角色和组是图形中的不同概念。图形返回的角色不适用于基于角色的访问控制 (RBAC),而组可以(并且应该)用于该目的。有关更多信息,请参阅我的另一个答案 此处.
此外,在不知道应用程序需求的情况下,仅当需要使用多个标识提供者进行身份验证时,才应使用 ACS。看起来你只是使用 Azure AD 作为 IdP,因此可以直接向服务进行身份验证,而不是使用 ACS 作为中间人。
本主题有关 Azure AD 中的授权和 RBAC 以及随附的代码示例应帮助你详细了解如何在 Azure AD 和图形中使用角色和组。