首页 > 解决方案 > 使用本机应用类型登录 AAD 时,Azure AD JWT 缺少“组”节点

问题描述

登录 Native App 时获取的 JWT 不会像登录 Web App 时获取的 JWT 那样发出“groups”节点。

两个应用注册都配置为发出组 “groupMembershipClaims”:“SecurityGroup”

这是一个隐式授权方案

标签: jwtazure-active-directory

解决方案


更新

这适用于希望稍后了解解决方案的任何人。

从@LastTribunal 获得更多信息后,发现有 3 个单独的应用程序正在使用中(一个 Web 应用程序 SPA、一个基于 .NET 的本机应用程序和一个 Web API)。第三个应用程序的清单,即缺少 web api"groupMembershipClaims": "SecurityGroup"

底线:即使从本机应用程序获取令牌以访问 web api,只要 web api 的清单配置正确,访问令牌确实包含组声明。

这是指向 @LastTribunal 所关注的示例的链接,并且在本机应用程序中存在问题。使用交互式身份验证将 Azure AD 集成到 Windows 桌面应用程序中

初步答案

您要检查的用户可能属于 6 个或更多组。在隐式授权流的情况下,如果完整组声明将 URI 片段扩展到 URL 长度限制之外,Azure AD 会向您发送超额声明而不是“组”声明。

因此,您可能会通过“hasgroups”或“groups:src1”之类的声明获得超额指示符,具体取决于令牌的长度是否会成为问题。

例如,在单页应用程序 (SPA) 的情况下,您将收到“hasgroups”声明,而在使用 ADAL.NET 库的基于 .NET 的本机应用程序的情况下,令牌长度不是问题,我已经看到“组:src" 用于超龄指示。

基本上你会得到一个提示,用户是很多组的一部分(目前很多意味着 6 个或更多),你必须进行第二次调用以获取有关该用户所属的所有组的信息。

Microsoft Docs:链接

在此处输入图像描述


推荐阅读