繁体   English   中英

Azure B2C 联合注销未完成(身份令牌未传递到第三方端 session 端点)

[英]Azure B2C federated sign out is not complete (identity token is not passed to third party end session endpoint)

我有使用 Azure B2C 作为 IDP 的应用程序。 Azure B2C 提供了通过 OpenIdConnect 使用本地帐户或联合到第三方 IDP(身份服务器)的可能性。 我在 B2C 中使用自定义策略。 登录工作正常,但我在退出时遇到问题。 从联合身份提供者注销已执行,但第三方 IDP 的身份令牌未传递到末端 session 端点,并且未正确执行注销。

退出请求:

  1. GET 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
  2. GET https://thirdpartyidp.com/idp/connect/endsession <- id_token_hint 此处缺少查询字符串参数
  3. 获取https://thirdpartyidp.com/idp/logout?id=xxxxx
  4. 获取 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 肯定会尝试联合注销,但这并不完整。

我是否有某种自定义策略配置问题或可能是什么问题?

您需要配置您的依赖方以在注销期间发送 Id 令牌。

<UserJourneyBehaviors>
  <SingleSignOn Scope="Tenant" EnforceIdTokenHintOnLogout="true"/>
</UserJourneyBehaviors>

我从 MS 支持处得到答案,目前不支持将身份令牌传递给第三方 IDP 端 session 端点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM