13

背景

我们正在 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 租户进行身份验证?

4

1 回答 1

4

为这里的混乱道歉。我会仔细检查关于超额的声明,但无论如何 - 为了快速解除对您的阻止,我们假设您需要在没有超额索赔的帮助下手动获取组。您不能重复使用发送到 Web API 的令牌。该令牌的范围仅限于您的应用程序,任何其他收件人都会(或应该)拒绝它。好消息是,您的后端可以通过其请求 Graph 范围内的新令牌的流程很容易实现。请参阅https://github.com/AzureADSamples/WebAPI-OnBehalfOf-DotNet - 您的案例中的详细信息有点不同(您的 Web API 具有应用程序的受众 == 客户端 ID),但拓扑和代码/调用涉及的内容完全相同。!五。

于 2015-04-21T09:09:18.503 回答