如何验证用户是否是Azure AD中的组的一部分?

时间:2019-01-11 15:40:41

标签: azure-active-directory

我已经写了一个Python上托管的Open Shift应用程序。

用户登录到应用程序后,其特权取决于他在Azure Active Directory中的组成员身份。

如何通过我的应用程序验证用户是否属于Azure Active Directory中的组的成员?

1 个答案:

答案 0 :(得分:3)

您可以根据情况从应用程序中调用以下Microsoft Graph API-

  1. Check member groups

    如果您已经知道要检查/验证其成员身份的组,则此功能将很有帮助。

     POST https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/checkMemberGroups 
    

    在请求正文中,您可以提供groupdIds,即一个集合,其中包含要检查成员资格的组的对象ID。最多可以指定20个组。

     {
      "groupIds": [
           "fee2c45b-915a-4a64b130f4eb9e75525e",
           "4fe90ae065a-478b9400e0a0e1cbd540"
       ]
     }
    
  2. user: getMemberGroups

    如果您还不知道该组,并且想要获取该用户所属的所有组,则将很有帮助。

     POST https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/getMemberGroups
    

您还可以通过编辑应用程序的清单(可以直接在Azure Portal中完成)并将"groupMembershipClaims"属性设置为"All"来使组声明作为应用程序的访问令牌的一部分出现或根据需要"SecurityGroup"

尽管groupMemembershipClaims有一个问题,但该令牌并不总是随用户所属的所有组一起出现。如果用户是太多组的成员(AFAIK是6个或更多),您只会返回超额指示符,例如hasGroups,它告诉您该用户是许多组的一部分,因此应调用graph api来获取所有组的列表。这就是我强调相关的Microsoft Graph API的原因。

这是一个基于组声明进行授权的示例应用程序。它使用.NET 4.5 MVC,C#,但概念相同-

Authorization in a web app using Azure AD groups & group claims

这里是另一个SO Post,其中讨论了类似的要求。它还提到考虑使用应用程序角色来做出授权决策,因为在某些情况下这样做可能更合适。