Azure AD B2C自定义策略修改登录邮箱后SSO会话未更新问题
AAD B2C自定义策略修改登录邮箱后会话未同步更新的问题
我基于AAD B2C改登录邮箱的示例自定义策略开发了邮箱更新功能,该策略可成功修改用户登录邮箱,返回的JWT中email和signInName均已更新为新邮箱,但AAD B2C的活跃会话仍保留旧的signInName值。
测试验证结果
1. 执行改邮箱策略后返回的JWT
{ "alg": "RS256", "kid": "...", "typ": "JWT" }.{ "ver": "1.0", "iss": ".../v2.0/", "sub": "...", "aud": "...", "exp": 1684332014, "acr": "b2c_1a_change-email", "nonce": "defaultNonce", "iat": 1684328414, "auth_time": 1684328414, "email": "newSignInName@email.com", "signInName": "newSignInName@email.com", "tid": "...", "nbf": 1684328414 }.[Signature]
2. 活跃会话下执行注册/登录策略返回的JWT(SSO直接返回令牌)
{ "alg": "RS256", "kid": "...", "typ": "JWT" }.{ "ver": "1.0", "iss": ".../v2.0/", "sub": "...", "aud": "...", "exp": 1684332014, "acr": "b2c_1a_signup-signin-sspr", "nonce": "defaultNonce", "iat": 1684328414, "auth_time": 1684328414, "signInName": "oldSignInName@email.com", "tid": "...", "nbf": 1684328414 }.[Signature]
问题影响
会话不同步会导致同一会话中调用其他依赖邮箱的自定义策略时出错,例如需要邮箱验证的CIAM流程会使用旧邮箱而失败。目前仅能通过用户登出后重新用新邮箱登录解决,但希望实现修改邮箱后直接更新会话。
解决方案
要在修改登录邮箱后同步更新AAD B2C会话,需在改邮箱策略中添加会话更新逻辑,推荐以下步骤:
1. 重新读取用户最新声明
在改邮箱的用户旅程中,更新用户信息的步骤之后,添加一个OrchestrationStep,调用AAD-UserReadUsingObjectId技术配置文件,重新获取用户最新的signInName声明,确保会话存储的是更新后的值。
示例步骤配置:
<OrchestrationStep Order="X" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="AADUserReadWithObjectId" TechnicalProfileReferenceId="AAD-UserReadUsingObjectId"/> </ClaimsExchanges> </OrchestrationStep>
2. 配置会话管理同步声明
修改改邮箱策略的RelyingParty部分,明确指定要同步到会话的声明列表,确保signInName包含在内:
<RelyingParty> <DefaultUserJourney ReferenceId="ChangeEmail"/> <TechnicalProfile Id="PolicyProfile"> <DisplayName>PolicyProfile</DisplayName> <Protocol Name="OpenIdConnect"/> <OutputClaims> <OutputClaim ClaimTypeReferenceId="signInName"/> <OutputClaim ClaimTypeReferenceId="email"/> <!-- 其他需要的声明 --> </OutputClaims> <SubjectNamingInfo ClaimType="sub"/> </TechnicalProfile> </RelyingParty>
同时,确保策略的SessionManagement配置正确,会话会存储这些输出声明:
<TechnicalProfile Id="PolicyProfile"> <!-- 其他配置 --> <SessionManagement ReferenceId="SM-AAD"/> </TechnicalProfile>
3. 备选方案:强制刷新会话(不推荐,影响SSO体验)
如果上述方法未生效,可在改邮箱流程完成后,前端调用AAD B2C授权端点时添加prompt=login参数,强制用户重新验证,从而生成包含新邮箱的会话。但此方法会打断SSO体验,仅作为临时备选。
内容的提问来源于stack exchange,提问作者erionpc
相关产品推荐
相关产品推荐

