如何在 Azure AD B2C 中管理用户流之间的单个帐户/会话

Posted

技术标签:

【中文标题】如何在 Azure AD B2C 中管理用户流之间的单个帐户/会话【英文标题】:How to manage single account/session between user flows in Azure AD B2C 【发布时间】:2021-08-15 07:29:58 【问题描述】:

我正在使用 MSAL 库使用 React 开发单页应用程序,其中用户使用 Azure 上的 SignupSignin 用户流程注册并登录帐户B2C 然后启动个人资料编辑用户流程。

但是当我检查初始 SignupSignin 流程中的帐户时,如下所示

msalInstance.getAllAccounts()

我只看到一个帐户,但一旦启动个人资料编辑流程,第二个帐户/会话就创建了。

有没有一种方法可以在 Azure AD B2C 的所有 用户流策略 中使用在 SignupSignin 用户流 中创建的相同会话? 我在启动配置文件编辑用户流程时使用以下方法

  const request = 
    scopes: <scopes>,
    account: <account>,// initial account returned when **SignupSignin** flow initiated
    authority: <profileEdit.authority>
  ;

  instance.loginRedirect(request).catch((e) => 
    console.error(e);
  );

【问题讨论】:

【参考方案1】:

如何在 Azure AD B2C 中管理用户流之间的单个帐户/会话 - 代码日志

在 Azure AD B2C 中管理用户流之间的单个帐户/会话:

• 添加 SSO(单点登录)方法以管理 AAD B2C 中用户流之间的单个帐户/会话。

• 初始登录添加 Azure AD B2C 保持基于 cookie 的会话

与 Azure AD B2C 的集成涉及以下类型的 SSO 会话:

• 应用程序 - 由 Web、移动或单页应用程序管理的会话 应用会话可以是存储在应用域名下的基于cookie的会话,例如https://onepageapp.com

可以通过 OAuth 访问、ID 令牌或 SAML 令牌保护单页应用程序。当用户尝试访问应用程序上的受保护资源时,应用程序会检查应用程序端是否存在活动会话。如果没有应用会话或会话已过期,应用会将用户带到 Azure AD B2C 登录页面

• 应用程序 - 此设置允许您专门为某个应用程序维护用户会话,独立于其他应用程序。例如,如果您希望用户登录 opepageapp.com,而不管用户是否已登录 Onepageapp,则可以使用此设置。

让我保持登录状态 (KMSI) - 通过使用持久性 cookie 来延长会话生命周期。

注意:XML 文件可在下面的参考链接中进行设置。

参考链接:https://docs.microsoft.com/en-us/azure/active-directory-b2c/session-behavior?pivots=b2c-custom-policy#single-sign-out

【讨论】:

感谢您提供的信息,但当通过 spa 启动新用户流时,仍会返回新的帐户会话。 tfp: "返回的 idtoken 中的 B2C_1_ProfileEdit 使用注册创建用户流程并使用编辑配置文件流程登录如下所示,B2C_1_SUSI_Main – 注册并登录 B2C_1_PROFILE_EDIT – 配置文件编辑。仅登录到 Web 应用程序,例如,使用 MS 帐户或个人帐户登录后,您将能够编辑同一帐户的配置文件。【参考方案2】:

不,您将始终根据用户流/自定义策略在 MSAL 中获得一个新帐户对象。这是因为 Account 对象是由 authority 定义的,并且每个用户流总是有不同的 authority。那是因为 authority 包含 AAD B2C 策略 ID,每个用户流始终是唯一的。

在大多数情况下,您可以忽略除注册/登录帐户对象之外的所有 MSAL 帐户对象。示例代码使用 selectAccount() 方法始终获取包含您的 Sign In/Up B2C Policy Id 的帐户对象。

如果您担心您的声明在配置文件编辑帐户对象 VS SUSI 策略中更新,则使用 MSAL ssoSilent() 方法针对 SUSI 策略执行基于静默 cookie 的 SSO,这样 SUSI 帐户对象是更新。在 Profile Edit 完成后对回调方法执行此操作。

仅当您的应用程序与 AAD B2C 位于同一根域中时,基于静默 cookie 的 SSO 才有效。您必须将 custom domain 与 AAD B2C 一起使用才能使其工作,否则现代浏览器保护将阻止此 iFrame。

【讨论】:

以上是关于如何在 Azure AD B2C 中管理用户流之间的单个帐户/会话的主要内容,如果未能解决你的问题,请参考以下文章

Azure AD B2C 将用户流与应用一对一关联

Azure AD B2C初识

在 Azure AD B2C 中请求令牌时缺少范围“scp”

无头认证Azure AD b2c

如何从Azure AD B2C获取用户组信息

在 Azure AD B2C 中,我们如何在注册和登录时自动链接帐户?用户应该只有一个帐户