首页 文章

在ADAL JS中使用Azure AD和OAuth2隐式授权对声明进行分组

提问于
浏览
11

背景

我们正在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 . 我已经阅读了this tweet from Vittorio

隐式授权不会发送这些声明,因为它会在查询字符串中返回令牌 - 它很容易超过最大长度

经过进一步调查,我也发现了this StackOverflow answer from Vittorio

我已经验证,在隐式授权案例中,您将始终通过超额索赔接收组 . 请参阅https://github.com/AzureADSamples/WebApp-GroupClaims-DotNet/tree/master/WebApp-GroupClaims-DotNet-它将向您展示如何处理超额索赔以检索组 .

我查看了JWT令牌,它不包括任何超额索赔(由 _claim_names_claim_sources 标识) . 我肯定是Azure AD中两个组的成员 .

我现在似乎还有两个相互矛盾的陈述,即是否有可能在隐式授权令牌中获取组信息(无论是直接还是间接) .

Question 1: Should I get an overage claim that I can use to get group information? If so, do I need to do anything to ensure that claim gets sent to me?

图谱API

我是否可以通过图API中的用户链接获得超额索赔,或者我是否必须手动创建链接以获取用户的组,我仍然不确定如何使用图API进行身份验证 .

我需要在收到带有承载令牌的请求(来自ADAL JS)后从后端联系图API .

Question 2: Can I send the same bearer token to the graph API to read that user's directory information? Or do I need to authenticate directly from my application to the graph API tenant in the context of the application rather than the user?

1 回答

  • 4

    为这里的混乱道歉 . 我将仔细检查有关超额的声明,但无论如何 - 为了快速解锁您,我们假设您需要手动获取组而无需超额索赔 . 您无法重复使用发送到Web API的令牌 . 该令牌的范围限定在您的应用中,任何其他收件人都会(或应该)拒绝它 . 好消息是,后端可以为Graph请求新标记的流程很容易实现 . 请参阅https://github.com/AzureADSamples/WebAPI-OnBehalfOf-DotNet - 您的案例中的详细信息有点不同(您的网络API具有您应用的受众== clientid)但拓扑和所涉及的代码/调用完全相同 . HTH! V.

相关问题