Azure AD B2C IEF自定义策略下SSO会话状态不持久如何排查?
排查SSO会话持久化问题的方案
一、使用Application Insights验证会话状态的方法
首先需要确保你已经完成了Identity Experience Framework(IEF)诊断日志到Application Insights的对接配置,开启了详细日志收集。完成后可以通过以下关键字段和事件排查:
- 搜索事件关键字
SSOSessionProvider,用户完成首次身份认证后,确认日志中存在SSO session created事件:该事件会记录生成的会话唯一标识、被写入会话存储的所有声明列表,你可以核对需要用于后续流程的声明是否已经被正确写入会话。 - 当用户从外部资料编辑站点跳转回B2C时,查找
SSO session retrieved事件:如果该事件不存在,说明会话持久化失败或者会话读取条件不匹配;如果该事件存在,可以对比事件中携带的声明值和首次写入时的内容是否一致,确认会话数据完整性。 - 若会话读取失败,日志中会明确返回
SSO session not found、SSO session invalid等错误标识,可对应排查:会话Cookie作用域配置错误、会话提供程序的IncludeInSso属性被设置为false、不同用户旅程的SessionManagementType配置不统一等问题。
二、会话状态提供程序的配置示例
以下是跨用户旅程共享SSO会话的标准配置参考:
- 统一全局会话配置
在所有需要共享会话的信赖方策略中,保持SessionManagementType配置一致:
<RelyingParty> <DefaultUserJourney ReferenceId="ProfileEdit" /> <UserJourneyBehaviors> <SessionManagementType>Default</SessionManagementType> <!-- 其他行为配置 --> </UserJourneyBehaviors> </RelyingParty>
- 认证环节关联会话管理技术概要
在登录完成的技术概要节点下,指定对应的SSO会话提供程序,示例如下:
<TechnicalProfile Id="AAD-UserReadUsingAlternativeSecurityId"> <!-- 现有技术概要配置 --> <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" /> </TechnicalProfile>
注意事项
- 从外部OIDC站点跳转回B2C的请求中,不要携带
prompt=login或prompt=consent参数,这类参数会强制B2C忽略现有会话,触发重新认证。 - 若需要跨域名共享会话,需要在会话提供程序配置中显式指定Cookie的域属性,确保不同子域名下的B2C流程都能读取到会话Cookie。
内容的提问来源于stack exchange,提问作者Brad C.
相关产品推荐
相关产品推荐

