Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .Net Core Azure AD Cloud如何登录用户并访问他们的Azure AD安全组以确定他们是否在组中_C#_Asp.net Mvc_Asp.net Core_Azure Active Directory_Azure Web App Service - Fatal编程技术网

C# .Net Core Azure AD Cloud如何登录用户并访问他们的Azure AD安全组以确定他们是否在组中

C# .Net Core Azure AD Cloud如何登录用户并访问他们的Azure AD安全组以确定他们是否在组中,c#,asp.net-mvc,asp.net-core,azure-active-directory,azure-web-app-service,C#,Asp.net Mvc,Asp.net Core,Azure Active Directory,Azure Web App Service,Azure AD Cloud如何登录用户并访问他们的Azure AD安全组以确定他们是否在组中?我过去曾使用WindowsIdentity获取此信息,当时我们在本地发布了广告,但它不适用于Azure广告云。如何获取登录的用户信息以及他们所属的所有安全组?我不知道该怎么做。我花了很多时间试图找到答案,但运气不好 有两种可能的方法可以做到这一点: 使用相关的Microsoft Graph API查询组信息 以下是一些似乎相关的API(您也可以找到其他API) -如果您已经知道一组要对照已知的组列表检

Azure AD Cloud如何登录用户并访问他们的Azure AD安全组以确定他们是否在组中?我过去曾使用WindowsIdentity获取此信息,当时我们在本地发布了广告,但它不适用于Azure广告云。如何获取登录的用户信息以及他们所属的所有安全组?我不知道该怎么做。我花了很多时间试图找到答案,但运气不好

有两种可能的方法可以做到这一点:

  • 使用相关的Microsoft Graph API查询组信息

    以下是一些似乎相关的API(您也可以找到其他API)

    -如果您已经知道一组要对照已知的组列表检查/验证成员资格并做出一些决定的组,则此选项将非常有用

    POST https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/checkMemberGroups 
    
    在请求正文中,您可以提供
    groupdIds
    ,即包含要检查其成员资格的组的对象ID的集合。最多可指定20组

     {
      "groupIds": [
           "fee2c45b-915a-4a64b130f4eb9e75525e",
           "4fe90ae065a-478b9400e0a0e1cbd540"
       ]
     }
    
    -如果要获取此用户所属的所有组,则此选项将非常有用。返回用户所属的所有组

    检查此组是否可传递,因此您可以确保所有组都将返回。最多2046个作为1个请求的一部分返回。它还适用于O365组,您可以使用参数筛选到启用安全性的组

    POST https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/getMemberGroups
    
  • 作为令牌的一部分获取组成员资格声明

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

    一旦应用程序清单如上所述更新,您就可以将组Id作为声明的一部分。下面是一个解码的JWT令牌的快速示例

  • 比较方法和可作为令牌一部分返回的组数限制

    使用Microsoft Graph API的方法可能有两个优点,因此请根据您希望支持的应用程序需求/场景进行适当选择

    • 使用Microsoft Graph API,您不必担心超龄场景

      当您启用groupMembershipClaims作为令牌的一部分时,如果用户是太多组的一部分,为确保令牌大小不超过HTTP标头大小限制,Azure AD将限制其在组声明中包含的ObjectID的数量。如果用户是超过超龄限制的组的成员(SAML令牌为150,JWT令牌为200),则Azure AD不会在令牌中发出组声明。相反,它在令牌中包含一个overage声明,指示应用程序使用Graph API检索用户的组成员资格

    • 若您需要任何其他信息,如组名或任何其他需要再次使用Microsoft Graph API查询的属性,则访问令牌将仅包括组ID

    考虑使用应用程序角色

    由于您提到您将要使用组成员信息来做出一些授权决策,请务必知道Azure AD还提供了一个功能来定义特定于应用程序的角色,然后可以将这些角色分配给用户并帮助做出授权决策

    你可以在这里阅读更多关于它的信息。这些可以单独使用,甚至可以与集团声明结合使用,以做出授权决策。这些链接也可能有所帮助

    代码示例


    查看..的可能副本。。请看一看。。它非常相似,应该能满足你的需求。我不想重复答案,除非你的问题有什么不同,所以请随意评论。快速总结。。两种可能的方法1)使用Microsoft Graph API查询具有类似
    API的组https://graph.microsoft.com/v1.0/users/{id | userPrincipalName}/checkMemberGroups
    和类似的
    getMemberGroups
    2)通过编辑应用程序的清单和设置
    “groupMembershipClaims”
    属性到
    “All”
    “SecurityGroup”“
    根据需要。使用Microsoft Graph API的方法具有优势。。因为当用户是太多组的一部分时,您不会在令牌中返回GroupID,而是返回一个超龄指示器。@Rohistaigal:请您在答案中添加您的注释。@MohitVerma MSFT我添加了一个答案并进行了详细说明。请随意建议任何其他适当的信息/编辑。