我们想将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" }
设置后,登录有效。但是,用户组根本不包含在访问令牌中。有人知道我们所缺少的吗?
答案 0 :(得分:1)
正如您在评论中所述,登录用户是6个以上群组的成员。在这种情况下,您不会获得所有组ID的groups
声明,但是Azure AD会返回超额指示器,这是一个提示,让您知道用户是多个组的成员。 Microsoft Docs
有团体索赔
如果SPA使用OAuth 2.0隐式授权流,则使用的超额指示符为hasgroups
声明。其背后的原因是要确保URI片段不超过URL长度限制。因此,如果用户是最多5个组的一部分,则长度不是问题,您将获得实际的组ID。如果是6个或更多,则需要使用图形API进行单独调用以获取组。
groups:src1声明
groups:src1
声明也是一个超量指示器,但是该声明提供了有关调用哪个端点以获取组的更多信息。我已经看到这种说法是在与网址长度相关的限制不适用时提出的,例如如果不是使用基于Angular的SPA,而是使用带有ADAL.NET库的基于.NET的控制台应用程序。同样,目的是让您知道用户是许多组的一部分,并且您需要单独致电以获取该信息。
如何为用户获取与组相关的信息?
正如hasgroups
的文档所述,您可以调用Azure AD Graph API
https://graph.windows.net/{tenantID}/users/{userID}/getMemberObjects
您还可以使用较新的Microsoft Graph API。这是较新的,建议使用。您可以在此处Microsoft Graph or Azure AD Graph
了解与Azure AD Graph API的比较以及何时使用哪个比较。我看到稳定版本v1.0至少具有两个可能对您有帮助的API:
GET /users/{id | userPrincipalName}/memberOf
POST /users/{id | userPrincipalName}/getMemberGroups
对此API的检查是可传递的,与读取memberOf导航属性不同,该属性仅返回用户是其直接成员的组。它支持Office 365和Azure AD中预配的其他类型的组。每个请求最多可以返回2046个群组