背景
我们正在 Azure 中开发具有 AngularJS 前端和 Web API 后端的多租户 SaaS 产品。我们使用 Azure AD 进行身份验证并将其与 ADAL JS 挂钩(使用 OAuth2 隐式授权)。作为一个多租户应用程序,我们允许客户针对他们自己的 Azure AD(可能连接也可能不连接到本地 AD)进行身份验证。
到目前为止,这一切都很好。ADAL JS 将用户带到 Azure 登录页面,一旦用户通过身份验证,就会发出 OAuth2 令牌。然后,此 JWT 令牌作为不记名令牌与所有 API 调用一起发送,我们有自己的声明转换过程,用于将来自 Azure 的传入声明映射到我们的应用程序声明。
我们没有在声明转换过程中指定单个用户,而是尝试通过 AD 组来完成。这允许我们的客户在他们的 AD 中拥有安全组,然后我们的应用程序将使用它来映射到正确的应用程序声明。
问题
我们收到的 JWT 令牌不包含groups
属性,尽管已在 AAD 应用程序清单中设置groupMembershipClaims
为。SecurityGroup
从那以后,我在Vittorio 的这条推文中读到
隐式授权不会发送这些声明,因为它会在查询字符串中返回令牌 - 很容易超过最大长度
经过进一步调查,我还发现了 Vittorio 的 StackOverflow 答案,上面写着
我已验证,在隐式授权情况下,您将始终通过超额索赔接收组。请参阅https://github.com/AzureADSamples/WebApp-GroupClaims-DotNet/tree/master/WebApp-GroupClaims-DotNet - 它将向您展示如何处理超额索赔以检索组。
我查看了 JWT 令牌,它不包括任何超额声明(由_claim_names
和标识_claim_sources
)。我绝对是 Azure AD 中两个组的成员。
关于是否可以在隐式授权令牌中获取组信息(无论是直接还是间接),我现在似乎也有两个相互矛盾的陈述。
问题 1:我是否应该获得可用于获取团体信息的超龄索赔?如果是这样,我是否需要做任何事情来确保将索赔发送给我?
图形 API
我是否可以通过图形 API 中的用户链接获得超额声明,或者我是否必须手动制作链接以获取用户组,我仍然有点不确定如何使用图形 API 进行身份验证。
在收到带有不记名令牌的请求(来自 ADAL JS)后,我需要从后端联系图形 API。
问题 2:我可以将相同的不记名令牌发送到图形 API 以读取该用户的目录信息吗?或者我是否需要在应用程序而不是用户的上下文中直接从我的应用程序向图形 API 租户进行身份验证?