AAD 团体声称某些用户的 JWT 令牌缺失

ReB*_*orn 5 oauth-2.0 jwt azure-active-directory azure-ad-b2b

我在 AAD 上遇到一些奇怪的行为。用户成功登录后,我们的 API 调用中某些用户会收到未经授权的消息。结果发现 JWT 中的声明丢失了。一些用户获得“groups”声明(他所属的所有 groupId 的数组),一些用户获得“hasgroups”声明(如果用户有组,则为布尔值,没有 ID)。由于我们的 API 应用程序正在检查此“组”声明以获取授权,因此没有此“组”声明的用户将收到 403。\xe2\x80\xac

\n\n

\xe2\x80\xaa尽管如此,在应用程序注册的清单中,我将 \xe2\x80\x9cgroupMembershipClaims\xe2\x80\x9d 从 \xe2\x80\x9cnull\xe2\x80\x9d 设置为“All”或“SecurityGroup” ,这应该可以达到目的。还要将“oauth2AllowImplicitFlow”设置为 true,因为我们正在使用使用 OAuth2 的 Angular 应用程序。接下来,我比较了几乎所有用户设置,除了一些额外的组之外,用户是相同的。\xe2\x80\xac 受影响的用户没有很多组,有些甚至有大约 5 个组最大限度。

\n\n

我是否忽略了某些事情或导致索赔差异的原因?我该如何解决这个问题,以便所有用户都获得“组”声明?

\n

ReB*_*orn 3

从 MSFT 内部得到了这样的反馈:

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

和这个

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

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