Общая ошибка Azure AD B2C с LinkedIn ClaimsProvider - AADB2C90289. Мы обнаружили ошибку при подключении к поставщику удостоверений.

Я пытался создать UserJourney, который свяжет учетную запись в социальной сети LinkedIn с существующей учетной записью Local AAD B2C. В качестве руководства я использовал следующее:

Когда я настраиваю учетную запись Microsoft (это OpenIdConnect), все работает отлично, поэтому я считаю, что у меня есть правильные части UserJourney.

Когда я пытаюсь использовать LinkedIn OAuth2 ClaimsProvider, он всегда выдает общую ошибку:

AADB2C90289: We encountered an error connecting to the identity provider. Please try again later.
Correlation ID: 90f20acf-b725-405d-a3ac-120e5b559f6f
Timestamp: 2020-01-03 15:17:54Z

Вещи, которые я пробовал:

  • Подключение Application Insights в режиме разработчика - кроме указанной выше информации нет трассировки, ведения журнала или ошибок.
  • Создание второго приложения LinkedIn и переключение учетных данных - тот же результат
  • Обмен URL-адресов v1 и v2 ClaimsEndpoint
  • Отключение всего OutputClaimsTransformations и всего, что казалось вычисленным - тот же результат
  • Создание политики через портал (не настраиваемой), которая позволяет мне войти в систему и создать новую учетную запись в AAD; это не то, что мне нужно, но указывает на то, что учетные данные и настройка приложения LI должны быть в порядке
  • Отслеживание сетевых вызовов - я вижу, что ответ от LinkedIn отправляется в https://mydomain.b2clogin.com/mydomain.onmicrosoft.com/oauth2/authresp с аргументом code и state, поэтому я предполагаю, что проблема заключается в обработке ответа

Как я уже упоминал, подключение к провайдеру MSA-OIDC прошло нормально, хотя это и не OAuth2. Поэтому я предполагаю, что проблема в том, как я настроил соединение OAuth2, но я не могу определить проблему

Вот материальные части моего ClaimsProvider:

<ClaimsProvider>
    <Domain>linkedin.com</Domain>
    <DisplayName>LinkedIn</DisplayName>
    <TechnicalProfiles>
        <TechnicalProfile Id="LinkedIn-OAUTH-Base">
            <DisplayName>LinkedIn</DisplayName>
            <Protocol Name="OAuth2" />
            <Metadata>
                <Item Key="ProviderName">linkedin</Item>
                <Item Key="authorization_endpoint">https://www.linkedin.com/oauth/v2/authorization</Item>
                <Item Key="AccessTokenEndpoint">https://www.linkedin.com/oauth/v2/accessToken</Item>
                <Item Key="ClaimsEndpoint">https://api.linkedin.com/v2/me</Item>
                <!--<Item Key="ClaimsEndpoint">https://api.linkedin.com/v1/people/~:(id,formatted-name,email-address)</Item>-->
                <Item Key="ClaimsEndpointAccessTokenName">oauth2_access_token</Item>
                <Item Key="ClaimsEndpointFormatName">format</Item>
                <Item Key="ClaimsEndpointFormat">json</Item>
                <Item Key="scope">r_emailaddress r_liteprofile</Item>
                <Item Key="HttpBinding">POST</Item>
                <Item Key="external_user_identity_claim_id">id</Item>
                <Item Key="BearerTokenTransmissionMethod">AuthorizationHeader</Item>
                <Item Key="ResolveJsonPathsInJsonTokens">true</Item>
                <Item Key="UsePolicyInRedirectUri">0</Item>
                <Item Key="response_type">code</Item>
                <Item Key="client_id">0</Item>
            </Metadata>
            <CryptographicKeys>
                <Key Id="client_secret" StorageReferenceId="B2C_1A_LinkedInSecret" />
            </CryptographicKeys>
        </TechnicalProfile>
        <TechnicalProfile Id="LinkedIn-OAUTH-Link">
            <DisplayName>Link LinkedIn</DisplayName>
            <Metadata>
                <Item Key="ClaimTypeOnWhichToEnable">issuers</Item>
                <Item Key="ClaimValueOnWhichToEnable">linkedin.com</Item>
            </Metadata>
            <InputClaims />
            <OutputClaims>
                <OutputClaim ClaimTypeReferenceId="issuerUserIdToLink" PartnerClaimType="id" />
                <OutputClaim ClaimTypeReferenceId="issuerToLink" DefaultValue="linkedin.com" AlwaysUseDefaultValue="true" />
            </OutputClaims>
            <OutputClaimsTransformations>
                <OutputClaimsTransformation ReferenceId="CreateUserIdentityToLink" />
                <OutputClaimsTransformation ReferenceId="AppendUserIdentityToLink" />
            </OutputClaimsTransformations>
            <IncludeTechnicalProfile ReferenceId="LinkedIn-OAUTH-Base" />
            <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
            <EnabledForUserJourneys>OnItemAbsenceInStringCollectionClaim</EnabledForUserJourneys>
        </TechnicalProfile>
    </TechnicalProfiles>
</ClaimsProvider>

Примечание. Я удалил значение client_id, но оно установлено в реальной версии.

Примечание 2: Также в реальной версии профиль -Link находится в файле, отличном от профиля -Base, но я не думаю, что это имеет значение для проблемы.

Если кто-то может помочь мне определить проблему здесь, я был бы благодарен. Я немного застрял на этом этапе.


person Richard Hauer    schedule 03.01.2020    source источник
comment
Посмотрите, помогает ли этот пост stackoverflow.com/questions/57109533/   -  person Tony Ju    schedule 14.01.2020
comment
Спасибо @TonyJu - мне не удалось решить проблему, но я полностью удалил LinkedIn, загрузил файлы, повторно добавил и загрузил файлы, и он загадочным образом начал работать.   -  person Richard Hauer    schedule 14.01.2020
comment
Рад слышать это, вы можете добавить свое решение в качестве ответа.   -  person Tony Ju    schedule 14.01.2020
comment
Я бы сделал это, но я не думаю, что "выключить и снова включить" действительно можно считать решением?   -  person Richard Hauer    schedule 14.01.2020
comment
Мы получили ответ не 200 от linkedin, поскольку мы перенаправлялись на их конечную точку / authorization. Наверное, там какая-то проблема.   -  person Jas Suri - MSFT    schedule 20.01.2020