这是我在这里发表的第一篇文章,所以请温柔地对待我! :)
我正在尝试使用Azure ACS(即Office 365)作为身份验证系统开发应用程序。事情的身份验证方面似乎运行良好,我被重定向到Office 365登录页面,并可以成功登录。我的代码然后使用Graph API获取有关该用户的其他信息。
我正在努力获取登录人员所属的AD群组列表。当我请求组列表时,只返回Office 365安全角色。
这就是我所做的(我希望我已经包含了所有相关内容)
从Azure内部;
从我的测试应用中;
这是我的相关代码
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有关。
我可能错过了一个非常基本的步骤,并会永远感激在正确的方向上推动:)
谢谢, 达伦
答案 0 :(得分:0)
假设您的代码很好(仅使用代码段很难分辨),您的主要问题是您使用Role
代替Group
。角色和组是图中的不同概念。图表返回的角色不适用于基于角色的访问控制(RBAC),而组可以(并且应该)用于此目的。 See my other answer here for more information
此外,在不知道应用程序需求的情况下,如果需要对多个身份提供程序进行身份验证,则应该只使用ACS。看起来您只是使用Azure AD作为您的IdP,因此您可以直接对服务进行身份验证,而不是使用ACS作为中间人。
Azure AD中的This topic about authorization and RBAC和accompanying code sample应该可以帮助您了解有关如何在Azure AD和图表中使用角色和组的更多信息。