Active Directory不为所有用户返回组

时间:2017-09-08 19:41:46

标签: azure-active-directory

我已经使用express和passport-azure-ad库构建了一个node.js应用程序,以便通过AAD对用户进行身份验证。我希望在登录用户的auth回调中返回组,这样我就可以确保他们属于正确的安全组,然后授予他们访问我应用程序部分的权限。

我编辑了我的Active Directory应用程序清单(Clarity)以包含

" groupMembershipClaims":"所有"

对于我已登录的所有用户,除了一个之外,这个工作非常有效。通常我会在此表单的配置文件对象中获得响应:

accessToken: "scrubbedAccessToken"
aio: "scrubbedAio"
amr: "["pwd"]"
family_name: "My Last Name"
given_name: "My First Name"
groups: Array[1]
    0: "[...hugeListofGuids...]"
    length: 1
in_corp: "true"
ipaddr: "my ip"
name: "My Name"
oid: "scrubbedOid"
onprem_sid: "scrubbedSid"
sub: "scrubbedSub"
tid: "scrubbedTid"
unique_name: "myemail@microsoft.com"
upn: "myemail@microsoft.com"
ver: "1.0"

但由于某些原因,我的某个用户的应用会改为:

_claim_names: "{"groups":"src1"}"
_claim_sources: "{"src1":{"endpoint":"https://graph.windows.net/scrubbedTid/users/scrubbedOid/getMemberObjects"}}"
accessToken: "scrubbedAccessToken"
aio: "scrubbedAio"
amr: "["pwd"]"
family_name: "scrubbedLastName"
given_name: "scrubbedFirstName"
in_corp: "true"
ipaddr: "scrubbedIp"
name: "scrubbedFulleName"
oid: "scrubbedOid"
onprem_sid: "scrubbedSid"
sub: "scrubbedSub"
tid: "scrubbedTid"
unique_name: "scrubbedEmail"
upn: "scrubbedEmail"
ver: "1.0"

任何人都可以告诉我为什么我会为不同的用户提供不同的格式吗?这些用户都在同一个租户中,他们的电子邮件位于同一个域中。

1 个答案:

答案 0 :(得分:0)

根据令牌类型限制访问令牌中返回的组成员身份声明数。

请看一下这篇博文:Azure Active Directory, now with Group Claims and Application Roles!

  

要确保令牌大小不超过HTTP标头大小限制,   Azure AD限制它在组中包含的objectId的数量   要求。如果用户是超过超出限制的组的成员(150   对于SAML令牌,200用于JWT令牌),然后Azure AD不会发出   团体在令牌中声明。相反,它包括一个超额索赔   指示应用程序查询Graph API的令牌   检索用户的组成员资格。

您注意到的行为暗示此用户是太多群组的成员,您需要调用AAD Graph API来获取这些详细信息。