我已经使用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"
任何人都可以告诉我为什么我会为不同的用户提供不同的格式吗?这些用户都在同一个租户中,他们的电子邮件位于同一个域中。
答案 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来获取这些详细信息。