繁体   English   中英

AAD组声称某些用户在JWT令牌中丢失

[英]AAD groups claim missing in JWT token for some users

我在AAD上遇到了一些奇怪的行为。 用户登录成功后,我们的API调用会对某些用户进行未经授权的操作。 事实证明,JWT中的索赔缺失。 有些用户正在获得“组”声明(他所属的所有groupIds的数组),有些用户正在获得“hasgroups”声明(如果用户有组,则没有ID,则为布尔值)。 由于我们的API应用程序正在检查此“群组”授权声明,因此没有此“群组”声明的用户将获得403。

然而,在应用程序注册的清单中,我将“groupMembershipClaims”从“null”设置为“All”或“SecurityGroup”,这应该同时执行这两个操作。 当我们使用使用OAuth2的Angular应用程序时,还要将“oauth2AllowImplicitFlow”设置为true。 接下来我比较了几乎所有的用户设置,除了一些额外的组,用户是相同的。受影响的用户没有很多组,有些甚至在最多的5组。

我是否忽视了某些内容或者是什么导致了索赔中的这种差异? 我如何解决这个问题,以便所有用户都获得“群组”声明?

得到了MSFT内部的反馈:

在隐式流中,oauth将通过查询字符串参数直接从初始/授权调用返回Jwt。 http规范限制查询字符串/ url的长度,因此如果AAD检测到生成的URI将超过此长度,则它们将使用hasGroups声明替换组。

还有这个

无论清单中的“groupMembershipClaims”设置如何,这在使用隐式授权流时都是设计使然。 当令牌作为URI片段返回时,应避免超过浏览器的URL长度限制。 因此,在4个用户的组成员资格之后或多或少,您将在令牌中获得“hasgroups:true”。 您可以做的是单独调用Graph API来查询用户的组成员身份。

因此,需要对Graph API进行额外的往返才能获得用户组。 希望这也有助于其他人。

现在, 参阅https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-token-and-claims中的Azure AD令牌参考。

对于OAuth2隐式授权流,它使用hasGroups标记和此标记的文档状态:

使用代替的groups如果完整基团如权利要求将扩展URI片段超出URL长度限制(目前6或更多个基团),用于在隐式许可JWTs权利要求流动。

对于其他流程:

如果用户所在的组数量超过限制(SAML为150,JWT为200),则将添加超额声明,指向包含用户组列表的Graph端点的声明源。

您可以使用图谱API使用https://graph.windows.net/{tenantID}/users/{userID}/getMemberObjects获取用户的组。

或者,在https://graph.windows.net/myorganization/isMemberOf?api-version有端点,如https://msdn.microsoft.com/library/azure/ad/graph/api/functions-and-中所述。行动#isMemberOf

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM