如何在 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 中管理用户流之间的单个帐户/会话的主要内容,如果未能解决你的问题,请参考以下文章