代码之家  ›  专栏  ›  技术社区  ›  bramvdk

azure ad openid连接-令牌中未显示组

  •  0
  • bramvdk  · 技术社区  · 7 年前

    我们希望将我们的Angular前端应用程序连接到azure ad。我们已开始使用以下示例项目对此进行测试: https://blogs.msdn.microsoft.com/premier_developer/2018/10/24/using-adal-js-with-angular4/#

    在app.module.ts中,我们提供了如下的azure ad配置。

    {
      provide: APP_CONFIG, useValue: { 
        clientId: '<our-client-id>',
        tenantId: '<our-app-id>',
        redirectUri: 'http://localhost:4200/frameredirect',
      }
    }
    

    在azure门户中,我们创建了应用注册,并将重定向url配置为与上述内容匹配。根据 https://docs.microsoft.com/en-us/azure/active-directory/develop/access-tokens 我们还应该在azure门户中配置应用程序清单,以便用户组将包含在令牌中。因此,在Minifest中,我们将GroupMembershipClaims设置为SecurityGroup。现在所有组织组都应该包含在令牌中。如果有多个角色,那么我们应该看到一个可以查询组的端点。类似于:

    "src1" : { "endpoint" : 
    "https://graph.windows.net/{tenantID}/users/{userID}/getMemberObjects" }
    

    设置之后,登录就可以工作了。但是,用户组根本不包括在访问令牌中。有人知道我们遗漏了什么吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Rohit Saigal    7 年前

    正如您在评论中提到的,登录用户是6个以上组的成员。在这种情况下你不会回来 groups 声明所有组id,但azure ad返回一个超龄指示器,这是一个提示,让您知道用户是许多组的成员。 Microsoft Docs

    Hasgroups索赔

    对于使用OAuth 2.0隐式授权流的SPA,使用的超额指标是 hasgroups 索赔。其背后的原因是确保uri片段不超过url长度限制。因此,如果用户是最多5个组的一部分,那么长度就不是问题,您可以得到实际的组id。如果是6个或更多,则需要使用Graph API单独调用以获取组。

    enter image description here

    组:src1声明

    这个 groups:src1 claim也是一个超龄指标,但是这个指标提供了更多关于调用哪个端点来获取组的信息。我见过这样的说法,当url长度相关的限制不适用时,例如,如果您使用基于.net的控制台应用程序而不是基于角度的spa,例如adal.net库。同样的目的是,让你知道用户是许多组的一部分,你需要单独打一个电话来获取信息。

    enter image description here

    如何为用户获取组相关信息?

    1. 作为 哈斯集团 声明本身提到,您可以调用azure ad graph api

      https://graph.windows.net/{tenantID}/users/{userID}/getMemberObjects
      
    2. 您还可以使用较新的Microsoft Graph API。这是新的和推荐的。您可以阅读关于与azure ad graph api的比较以及何时使用这里的哪个api Microsoft Graph or Azure AD Graph

      我看到稳定版本v1.0至少有两个api可能对您有帮助:

      List memberOf

      GET /users/{id | userPrincipalName}/memberOf
      

      user:getMemberGroups

      POST /users/{id | userPrincipalName}/getMemberGroups
      

      此API的检查是可传递的,与读取MemberOfNavigation属性不同,后者只返回用户是其直接成员的组。它支持在azure ad中设置的office 365和其他类型的组。每个请求可以返回的最大组数为2046