Azure AD OpenID连接-令牌中未显示的组

时间:2018-11-28 14:47:03

标签: azure jwt azure-active-directory microsoft-graph adal

我们想将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以匹配上述内容。根据{{​​3}}中提到的信息,我们还应该在Azure门户中配置应用清单,以便将用户组包含在令牌中。因此,在Minifest中,我们将groupMembershipClaims设置为SecurityGroup。现在,所有组织组都应包含在令牌中。如果有很多角色,那么我们应该看到一个可以查询组的端点。像这样:

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

设置后,登录有效。但是,用户组根本不包含在访问令牌中。有人知道我们所缺少的吗?

1 个答案:

答案 0 :(得分:1)

正如您在评论中所述,登录用户是6个以上群组的成员。在这种情况下,您不会获得所有组ID的groups声明,但是Azure AD会返回超额指示器,这是一个提示,让您知道用户是多个组的成员。 Microsoft Docs

有团体索赔

如果SPA使用OAuth 2.0隐式授权流,则使用的超额指示符为hasgroups声明。其背后的原因是要确保URI片段不超过URL长度限制。因此,如果用户是最多5个组的一部分,则长度不是问题,您将获得实际的组ID。如果是6个或更多,则需要使用图形API进行单独调用以获取组。

enter image description here

groups:src1声明

groups:src1声明也是一个超量指示器,但是该声明提供了有关调用哪个端点以获取组的更多信息。我已经看到这种说法是在与网址长度相关的限制不适用时提出的,例如如果不是使用基于Angular的SPA,而是使用带有ADAL.NET库的基于.NET的控制台应用程序。同样,目的是让您知道用户是许多组的一部分,并且您需要单独致电以获取该信息。

enter image description here

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

  1. 正如hasgroups的文档所述,您可以调用Azure AD Graph API

    https://graph.windows.net/{tenantID}/users/{userID}/getMemberObjects
    
  2. 您还可以使用较新的Microsoft Graph API。这是较新的,建议使用。您可以在此处Microsoft Graph or Azure AD Graph

    了解与Azure AD Graph API的比较以及何时使用哪个比较。

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

    List memberOf

    GET /users/{id | userPrincipalName}/memberOf
    

    user:getMemberGroups

    POST /users/{id | userPrincipalName}/getMemberGroups
    

    对此API的检查是可传递的,与读取memberOf导航属性不同,该属性仅返回用户是其直接成员的组。它支持Office 365和Azure AD中预配的其他类型的组。每个请求最多可以返回2046个群组