#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 не передается конечной точке сеанса, и выход выполняется неправильно.
Запросы на выход из системы:
- ПОЛУЧИТЬ 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
- ПОЛУЧИТЬ https://thirdpartyidp.com/idp/connect/endsession <- id_token_hint параметр querystring здесь отсутствует
- ПОЛУЧИТЬ https://thirdpartyidp.com/idp/logout?id=xxxxx
- ПОЛУЧИТЬ 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 в настоящее время не поддерживается.