Azure B2C 联合注销未完成(身份令牌未传递到第三方结束会话端点)
Posted
技术标签:
【中文标题】Azure B2C 联合注销未完成(身份令牌未传递到第三方结束会话端点)【英文标题】:Azure B2C federated sign out is not complete (identity token is not passed to third party end session endpoint) 【发布时间】:2021-04-14 23:31:05 【问题描述】:我有使用 Azure B2C 作为 IDP 的应用程序。 Azure B2C 提供了一种通过 OpenIdConnect 使用本地帐户或联合到第三方 IDP(身份服务器)的可能性。我在 B2C 中使用自定义策略。登录工作正常,但我在退出时遇到问题。从联合身份提供者注销已执行,但第三方 IDP 的身份令牌未传递到结束会话端点并且未正确执行注销。
退出请求:
-
获取https://xxxxx.b2clogin.com/xxxxx.onmicrosoft.com/b2c_1a_signup_signin/oauth2/v2.0/logout?post_logout_redirect_uri=https%3A%2F%2Flocalhost%3A44317%2Fsignout-callback-oidc&id_token_hint=xxxxx
GET https://thirdpartyidp.com/idp/connect/endsession
获取https://thirdpartyidp.com/idp/logout?id=xxxxx
GET https://localhost:44317/signout-callback-oidc?state=xxxxx
我也用开箱即用的用户流对此进行了测试,但出现了同样的问题。
我正在使用此技术配置文件配置:
<ClaimsProvider>
<Domain>thirdpartyidp</Domain>
<DisplayName>thirdpartyidp</DisplayName>
<TechnicalProfiles>
<TechnicalProfile Id="thirdpartyidp-OAUTH">
<DisplayName>thirdpartyidp</DisplayName>
<Protocol Name="OpenIdConnect" />
<Metadata>
<Item Key="ProviderName">thirdpartyidp</Item>
<Item Key="METADATA">https://thirdpartyidp.com/idp/.well-known/openid-configuration</Item>
<Item Key="ValidTokenIssuerPrefixes">https://thirdpartyidp.com</Item>
<Item Key="IdTokenAudience">app</Item>
<Item Key="DiscoverMetadataByTokenIssuer">true</Item>
<Item Key="response_types">code</Item>
<Item Key="response_mode">form_post</Item>
<Item Key="scope">openid profile</Item>
<Item Key="HttpBinding">POST</Item>
<Item Key="UsePolicyInRedirectUri">false</Item>
<Item Key="client_id">app</Item>
<Item Key="SingleLogoutEnabled">true</Item>
</Metadata>
<CryptographicKeys>
<Key Id="client_secret" StorageReferenceId="B2C_1A_thirdpartyidp" />
</CryptographicKeys>
<OutputClaims>
<OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="sub" />
<OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="sub" />
<OutputClaim ClaimTypeReferenceId="surName" PartnerClaimType="sub" />
<OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="sub" />
<OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="socialIdpAuthentication" />
<OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="iss" />
<OutputClaim ClaimTypeReferenceId="identityProviderAccessToken" PartnerClaimType="oauth2:access_token" />
</OutputClaims>
<OutputClaimsTransformations>
<OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/>
<OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/>
<OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/>
</OutputClaimsTransformations>
<UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin"/>
</TechnicalProfile>
</TechnicalProfiles>
</ClaimsProvider>
我发现两三年前的文章表明 Azure AD B2C 不支持将您从外部身份提供程序中注销。根据这篇相当新的文章(https://docs.microsoft.com/en-us/azure/active-directory-b2c/session-behavior?pivots=b2c-custom-policy#sign-out),如果我理解正确的话应该是可能的。 Azure B2C 肯定会尝试联合注销,但它并不完整。
我是否有某种自定义策略配置问题或可能是什么问题?
【问题讨论】:
【参考方案1】:您需要configure您的依赖方在注销期间发送 Id 令牌。
<UserJourneyBehaviors>
<SingleSignOn Scope="Tenant" EnforceIdTokenHintOnLogout="true"/>
</UserJourneyBehaviors>
【讨论】:
【参考方案2】:我从 MS 支持部门得到答复,目前不支持将身份令牌传递给第三方 IDP 结束会话端点。
【讨论】:
以上是关于Azure B2C 联合注销未完成(身份令牌未传递到第三方结束会话端点)的主要内容,如果未能解决你的问题,请参考以下文章
MVC 5、WIF (System.IdentityModel) 和 ADFS 未实际进行身份验证,联合注销时出错
用于Azure B2C acces令牌的Exchange Facebook SDK acces令牌
Azure AD B2C 与 ASP.NET Web API 发出令牌,用于 Web API 中的身份验证和访问 MS Graph API