我可以在Active Directory中验证用户,但我需要知道如果我们有多个组,我们是否可以对组中的特定用户进行身份验证。 基本上我正在重定向到http://[mydirectory].onmicrosoft.com并验证用户,但我需要知道我们是否有机制来验证来自特定组的用户,以便我可以根据它进行访问。
答案 0 :(得分:4)
假设这是 Azure AD(而不是本地 Windows Server AD),那么您有三个选项可以限制通过组访问应用程序。
选项1:要求用户/组分配到应用程序
这是唯一不需要在应用程序中添加授权逻辑的选项。
在经典Azure门户中配置应用程序时,可以将应用程序设置为需要用户分配:
然后,在"用户和组"对于该应用程序,您可以选择哪些用户或组应该有权访问该应用程序。
这里要考虑的最重要的事情是,这只适用于组的直接成员,而不适用于嵌套成员。
选项2:请求群组声明
此选项允许您在用户登录后请求返回到应用程序的令牌包含用户所属的组列表。这包括它们是传递成员的组(即嵌套组)。
通过经典Azure门户中的应用程序配置页面,您可以下载并上传应用程序的清单JSON文件。在清单中,找到"groupMembershipClaims"
属性,并将其设置为"All"
或"SecurityGroup"
(后者将排除分发列表)。
设置完成后,在用户登录后,生成的令牌将包含groups
声明,其中包含用户所属的组对象ID列表。然后,您的应用程序可以使用这些声明来决定用户是否应该有权访问。
Dushyant Gill在他的博客文章中详细介绍了群组声明:http://www.dushyantgill.com/blog/2014/12/10/authorization-cloud-applications-using-ad-groups/
这里重要的考虑因素是可以返回的组数量有限制。如果用户是此限制的更多组的成员,那么" overage"声明已发出,您的应用程序需要进行Azure AD Graph API调用才能获取完整列表。 (这也在Dushyant博客文章中有描述。)
选项3:直接使用Microsoft Graph API或Azure AD Graph API
最后一个选项是简单地调用Microsoft Graph API(或Azure AD Graph API,它们的行为几乎相同)来确定登录用户是否是给定组的成员。然后,您的申请可以做出授权决定。
您可以采取多种方法(这些都是传递检查,因此支持嵌套组):
isMemberOf
检查用户是否是指定(单个)组的成员。如果单个组应授予对您的应用的访问权限,则这是最简单的。 checkMemberGroups
检查用户是否是组列表中任何组的成员。如果不同的组在您的应用程序中授予不同的角色或权限,这将非常有用。getMemberGroups
返回用户所属的组的完整列表。这通常对进行授权检查不是特别有用。