如何在多租户网络客户端中认证和存储令牌(同一浏览器中的多个B2C身份)。

问题描述 投票:0回答:1

我正在设计一个单页应用程序 (SPA) 和 API,它将支持多个租户,包括在同一客户端浏览器中。想象一下类似于Azure Portal的体验,用户可以在他们已经登录到Azure AD的身份之间进行切换,只是在这种情况下,我使用的是Azure AD B2C。所有的登录都是通过一个Azure AD B2C实例发生的。重要的是,这些租户不一定要知道对方,因为它们都是白标的 -- 用户可能会被重定向到以下地址 https://multitenant.app/tenantA 并通过B2C方式登录,当被引导到的时候,体验完全不同。https://multitenant.app/tenantB 并通过B2C在那里登录。两个租户之间不需要在客户端上共享数据。

我可能如何去做:1)设计客户端,使请求到 https://multitenant.app/tenantX 被定向到Azure AD B2C,其方式是使用以下规则进行登录 tenantX2)设计客户端,使MSAL.js库正确地提供一个包含特定于 tenantX 当用户浏览到 https://multitenant.app/tenantX 在浏览器中?

目前我希望需要在客户端拦截对后端API的请求,先确定是否需要重定向到B2C,以便登录到请求的租户,并将该租户的相应访问令牌附加到API请求中。(所有这些都是假设我使用了隐式流,所以我在客户端有访问&刷新令牌可用)。

这样做有意义吗?有更好的方法吗?我曾讨论过使用服务器发出的会话cookie,这样浏览器就可以处理 "拦截-请求-附加-凭证 "方面的问题,所以也许这是一个可以避免在客户端维护所有这些令牌的选项?

而当客户端登录B2C时,这又是如何工作的呢?我是否可以充分地调整禁用B2C SSO功能,使单个用户代理(浏览器)仍然可以获得多个不同的令牌(用于不同的身份)?

azure-ad-b2c msal msal.js
1个回答
1
投票

方法需要有点不同。微软在Azure Portal中的 "租户挑选器 "就是这样做的。

  1. 我们掌握了你的账户在哪些租户中的映射。
  2. 然后,我们在应用中的租户挑选器UI中列出租户。
  3. 当你切换租户时,我们会对新的资源(即选定的租户)进行SSO认证,以获得一个令牌。
  4. 我们使用新的令牌来评估您在这个租户认购中的权利。

要在AAD B2C中翻译,你可以。

  1. 将标识符映射到 "租户
  2. 在认证时,调用你的API来获取租户列表。使用 这个 在认证流程中列出租户的样本
  3. 用户选择租户,或者你像微软一样,有一个默认的偏好,在这种情况下,使用B2C前提条件跳过上面的步骤。这样用户只需要在auth flow中经历一次选择租户的过程。之后,他们使用应用内租户选择器(继续阅读......)。
  4. 发给用户的token里面有租户作为一个claim,当这个token到达你的API时,就会被用来做授权。
  5. 在SPA中,现在渲染一个租户选取器,使用与步骤2中使用的API基本相同的方法
  6. 用户可以在SPA中选择一个新的租户,使用id_token_hint(例子)来为选定的租户播种一个新的B2C用户旅程。用户将通过这个旅程获得SSO,并获得一个包含新租户的新令牌作为索赔。
© www.soinside.com 2019 - 2024. All rights reserved.