Azure AD B2C中连接不同第三方身份存储的登录流程能否实现SSO?
Azure AD B2C 跨不同第三方身份存储应用的SSO实现方案
结论先行
直接用DefaultSSOSessionProvider跳过第三方IDP技术配置文件,来实现两个绑定不同第三方身份存储的应用之间的SSO行不通。因为Azure AD B2C的SSO会话和身份提供者(IDP)是绑定的,不同第三方IDP的会话完全独立,没法直接复用。
为什么会报错?
Azure AD B2C的SSO会话机制是和用户当前关联的IDP绑定的:
- 每个第三方IDP的会话都是独立的,
DefaultSSOSessionProvider只能管同一个IDP下的多应用SSO,跨不同IDP的会话根本没法共享。 - 你尝试跳过第三方IDP的技术配置文件时,B2C找不到匹配的现有会话(毕竟两个应用绑的是不同IDP),自然就抛出异常了。
可行的实现方案
方案1:把用户同步到B2C本地目录
- 给两个第三方IDP的自定义策略做配置,用户第一次登录时,把用户属性同步到B2C本地目录(用
AAD-UserWriteUsingAlternativeSecurityId这个技术配置文件就行)。 - 之后用户再登录,就优先用B2C本地目录的SSO会话,不用再跳转到第三方IDP验证。这样两个应用就能基于B2C本地用户实现SSO了。
- 注意:两个策略都得配置本地目录的SSO会话提供者,确保
DefaultSSOSessionProvider关联的是本地用户。
方案2:用自定义SSO会话存储
- 借助Azure Blob Storage或者Redis搞一个自定义的SSO会话存储,用户用任一第三方IDP登录后,把会话信息存到这个自定义存储里。
- 另一个应用登录时,先查自定义存储里有没有有效会话,有的话直接创建B2C会话,跳过第三方IDP的验证步骤。
- 重点:得写自定义技术配置文件来处理会话的读写,还要保证会话安全——比如加密存储、设置合理的过期时间。
方案3:做统一身份入口代理
- 搭一个中间身份代理服务,把两个第三方IDP的登录流程统一到这个代理入口。
- 用户通过代理登录任意一个第三方IDP后,代理给B2C返回统一的身份断言,这样两个应用的B2C策略都基于这个统一断言实现SSO。
配置注意点
- 如果选方案1,要确保两个自定义策略的
UserJourney里包含本地目录的登录步骤,而且在RelyingParty节点的DefaultUserJourney里配置SessionType="Persistent",保证本地会话持久化。 - 自定义会话存储的方案一定要严格遵守B2C的安全规范,别搞出会话劫持的风险。
内容的提问来源于stack exchange,提问作者Harshal
相关产品推荐
相关产品推荐

