Azure AD B2C自定义策略中,如何将logout_hint添加至联合IDP注销URL?
解决Azure AD B2C自定义策略中B2B身份提供商注销URL添加logout_hint参数的问题
核心问题定位
你已完成login_hint的声明配置,也能在B2C自身注销链接中带上参数,但单点注销时向联合IDP发送的logout请求未携带logout_hint,导致用户需要手动选择账户才能完成IDP侧注销。
具体配置步骤
1. 确保login_hint声明持久化到用户会话
先保证login_hint在用户登录后被存储到会话声明中,这样注销时能正常获取。在Azure AD B2B的技术配置文件里,添加输出声明并配置持久化:
<TechnicalProfile Id="AADB2B-OIDC"> <!-- 其他原有配置 --> <OutputClaims> <OutputClaim ClaimTypeReferenceId="login_hint" PartnerClaimType="login_hint" /> <!-- 其他输出声明 --> </OutputClaims> <PersistedClaims> <PersistedClaim ClaimTypeReferenceId="login_hint" /> <!-- 其他持久化声明 --> </PersistedClaims> </TechnicalProfile>
2. 配置注销技术配置文件的参数映射
找到单点注销对应的技术配置文件,修改注销URL模板并映射login_hint到logout_hint参数:
<TechnicalProfile Id="AADB2B-SingleLogout"> <DisplayName>Azure AD B2B Single Logout</DisplayName> <Protocol Name="OpenIdConnect" /> <Metadata> <Item Key="HttpBinding">GET</Item> <!-- 拼接logout_hint参数到注销URL模板 --> <Item Key="LogoutEndpoint">https://login.microsoftonline.com/{tenantid}/oauth2/v2.0/logout?logout_hint={login_hint}</Item> </Metadata> <InputClaims> <!-- 将会话中的login_hint声明传递给logout_hint参数 --> <InputClaim ClaimTypeReferenceId="login_hint" PartnerClaimType="logout_hint" /> </InputClaims> </TechnicalProfile>
3. 确保注销用户旅程正确引用该技术配置
检查SignOut用户旅程的编排步骤,确认调用了上述单点注销技术配置:
<UserJourney Id="SignOut"> <OrchestrationSteps> <!-- 其他注销步骤 --> <OrchestrationStep Order="2" Type="ClaimsExchange"> <ClaimsExchanges> <ClaimsExchange Id="AADB2BLogoutExchange" TechnicalProfileReferenceId="AADB2B-SingleLogout" /> </ClaimsExchanges> </OrchestrationStep> <!-- 其他注销步骤 --> </OrchestrationSteps> </UserJourney>
4. 验证声明基础配置
确认login_hint的声明类型定义为无限制的字符串:
<ClaimType Id="login_hint"> <DisplayName>Login Hint</DisplayName> <DataType>string</DataType> <UserHelpText>Login hint for logout</UserHelpText> </ClaimType>
如果使用了自定义声明转换提取login_hint,确保该转换在登录流程的技术配置文件中被正确引用。
测试要点
- 开启浏览器开发者工具,查看B2C向联合IDP发送的注销请求URL,确认
logout_hint参数是否存在 - 若使用POST绑定,检查请求表单中是否包含
logout_hint字段
内容的提问来源于stack exchange,提问作者Andrii Dovhal
相关产品推荐
相关产品推荐

