Федеративный выход Azure B2C не завершен (токен удостоверения не передается сторонней конечной точке сеанса)

#azure-ad-b2c #azure-ad-b2c-custom-policy

#azure-ad-b2c #azure-ad-b2c-custom-policy

Вопрос:

У меня есть приложение, которое использует Azure B2C в качестве IDP. Azure B2C предоставляет возможность использовать локальную учетную запись или федерацию через OpenIdConnect к стороннему IDP (серверу идентификации). Я использую пользовательские политики в B2C. Вход в систему работает нормально, но у меня проблемы с выходом. Выполняется выход из федеративного поставщика удостоверений, но токен удостоверения стороннего IDP не передается конечной точке сеанса, и выход выполняется неправильно.

Запросы на выход из системы:

  1. ПОЛУЧИТЬ https://xxxxx.b2clogin.com/xxxxx.onmicrosoft.com/b2c_1a_signup_signin/oauth2/v2.0/logout?post_logout_redirect_uri=https://localhost:44317/signout-callback-oidcamp;id_token_hint=xxxxx
  2. ПОЛУЧИТЬ https://thirdpartyidp.com/idp/connect/endsession <- id_token_hint параметр querystring здесь отсутствует
  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 определенно пытается выполнить федеративный выход, но это не завершено.

Есть ли у меня какая-то проблема с настройкой пользовательской политики или в чем может быть проблема?

Ответ №1:

Вам необходимо настроить проверяющую сторону для отправки токена идентификатора во время выхода из системы.

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

Ответ №2:

Я получил ответ от службы поддержки MS, что передача токена идентификации сторонней конечной точке сеанса IDP end в настоящее время не поддерживается.