B2 C Пользовательская политика пропустить Регистрация для AAD по аутентификацииSource заканчивается AADB2C90037 - PullRequest
0 голосов
/ 09 февраля 2020

Я интегрировал мультитенант Azure AD с B2 C, используя пользовательские политики, и я не хочу, чтобы у пользователя Azure AD была страница регистрации, когда он пытается войти в первый раз. С тех пор, используя Preconditions, я пытаюсь пропустить страницу регистрации для пользователей входа в AD. Но это дает мне следующую ошибку AADB2C90037: An error occurred while processing the request. Please contact administrator of the site you are trying to access. Но если второе предварительное условие удалено с 4-го шага, оно не выдаст мне ошибку и откроет страницу регистрации, которая не является моим требованием. Мой поставщик претензий и предварительные условия в пути пользователя были упоминается ниже.

файл политики signin_signup

 <RelyingParty>
    <DefaultUserJourney ReferenceId="SignUpOrSignInAD" />

    <UserJourneyBehaviors>
      <JourneyInsights TelemetryEngine="ApplicationInsights" InstrumentationKey="xxxxxxxxx" DeveloperMode="true" ClientEnabled="false" ServerEnabled="true" TelemetryVersion="1.0.0" />
    </UserJourneyBehaviors>
    <TechnicalProfile Id="PolicyProfile">
      <DisplayName>PolicyProfile</DisplayName>
      <Protocol Name="OpenIdConnect" />
      <OutputClaims>
     <OutputClaim ClaimTypeReferenceId="displayName" />
        <OutputClaim ClaimTypeReferenceId="givenName" />
        <OutputClaim ClaimTypeReferenceId="surname" />
        <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" />
        <OutputClaim ClaimTypeReferenceId="otherMails" PartnerClaimType="emails" />
        <OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="sub" />
        <!-- <OutputClaim ClaimTypeReferenceId="identityProvider" /> -->
        <OutputClaim ClaimTypeReferenceId="tenantId" AlwaysUseDefaultValue="true" DefaultValue="{Policy:TenantObjectId}" />
        <OutputClaim ClaimTypeReferenceId="TnCs" />
        <OutputClaim ClaimTypeReferenceId="signInNames.emailAddress" PartnerClaimType="SignInemails" />
        <OutputClaim ClaimTypeReferenceId="signInName" />
        <OutputClaim ClaimTypeReferenceId="userPrincipalName" />
        <OutputClaim ClaimTypeReferenceId="upnUserName" />
        <OutputClaim ClaimTypeReferenceId="authenticationSource" />
      </OutputClaims>
      <SubjectNamingInfo ClaimType="sub" />
    </TechnicalProfile>
  </RelyingParty>

Поставщик утверждений для AD

  <ClaimsProvider>
  <Domain>commonaad</Domain>
  <DisplayName>Common AAD</DisplayName>
  <TechnicalProfiles>
    <TechnicalProfile Id="Common-AAD">
      <DisplayName>Multi-Tenant AAD</DisplayName>
      <Description>Login with your Contoso account</Description>
      <Protocol Name="OAuth2"/>
      <Metadata>
    <Item Key="AccessTokenEndpoint">https://login.microsoftonline.com/organizations/oauth2/v2.0/token</Item>
    <Item Key="authorization_endpoint">https://login.microsoftonline.com/organizations/oauth2/v2.0/authorize</Item>
    <Item Key="BearerTokenTransmissionMethod">AuthorizationHeader</Item>
    <Item Key="ClaimsEndpoint">https://graph.microsoft.com/v1.0/me</Item>
    <Item Key="client_id">xxxxxxxxxxxxxxxxxxxxxxxxxxx</Item>
    <Item Key="DiscoverMetadataByTokenIssuer">true</Item>
    <Item Key="HttpBinding">POST</Item>
    <Item Key="IdTokenAudience">xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</Item>
    <Item Key="response_types">code</Item>
    <Item Key="scope">https://graph.microsoft.com/user.read</Item>
    <Item Key="UsePolicyInRedirectUri">false</Item>
    <Item Key="ValidTokenIssuerPrefixes">https://login.microsoftonline.com/</Item>
      </Metadata>

      <CryptographicKeys>
        <Key Id="client_secret" StorageReferenceId="B2C_1A_AADAppSecret"/>
      </CryptographicKeys>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="objectId" />
        <OutputClaim ClaimTypeReferenceId="tenantId" PartnerClaimType="tid"/>
        <OutputClaim ClaimTypeReferenceId="authenticationSource" DefaultValue="ExternalAD" AlwaysUseDefaultValue="true" />
        <OutputClaim ClaimTypeReferenceId="identityProvider" PartnerClaimType="idp" />
        <OutputClaim ClaimTypeReferenceId="displayName" PartnerClaimType="displayName" />
        <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="mail" />
        <OutputClaim ClaimTypeReferenceId="givenName" PartnerClaimType="givenName" />
        <OutputClaim ClaimTypeReferenceId="surname" PartnerClaimType="surname" />
        <OutputClaim ClaimTypeReferenceId="issuerUserId" PartnerClaimType="id"/>
        <OutputClaim ClaimTypeReferenceId="userPrincipalName" PartnerClaimType="userPrincipalName" />
      </OutputClaims>
      <OutputClaimsTransformations>
        <OutputClaimsTransformation ReferenceId="CreateRandomUPNUserName"/>
        <OutputClaimsTransformation ReferenceId="CreateUserPrincipalName"/>
        <OutputClaimsTransformation ReferenceId="CreateAzureADIdentityProvider" />
        <OutputClaimsTransformation ReferenceId="CreateAlternativeSecurityId"/>
        <OutputClaimsTransformation ReferenceId="CreateSubjectClaimFromAlternativeSecurityId"/>
      </OutputClaimsTransformations>
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-SocialLogin"/>
    </TechnicalProfile>
  </TechnicalProfiles>
</ClaimsProvider>

Шаг Orchestrator для пропуска регистрации

<OrchestrationStep Order="4" Type="ClaimsExchange">
          <Preconditions>
            <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
              <Value>objectId</Value>
              <Action>SkipThisOrchestrationStep</Action>
            </Precondition>
           <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
             <Value>authenticationSource</Value>
              <Value>ExternalAD</Value>
              <Action>SkipThisOrchestrationStep</Action>
            </Precondition>
          </Preconditions>
          <ClaimsExchanges>
            <ClaimsExchange Id="SelfAsserted-Social" TechnicalProfileReferenceId="SelfAsserted-Social" />
          </ClaimsExchanges>
        </OrchestrationStep>

Ответы [ 2 ]

1 голос
/ 11 февраля 2020

Ваш подход правильный, в том смысле, что вы пропускаете шаг, чтобы это произошло. Но я не думаю, что Azure AD выдает заявку под названием «objectId», так что это ноль. Поэтому, когда B2 C пытается выдать токен, он не может. Проверьте журналы анализа приложений, чтобы увидеть возвращаемый токен AAD и правильно сопоставить заявки с B2I-1013 *.

См. Ссылку на токен AAD здесь: https://docs.microsoft.com/en-us/azure/active-directory/develop/id-tokens

В вашем Common-AAD техническом профиле он должен выглядеть следующим образом:

<OutputClaim ClaimTypeReferenceId="objectId" PartnerClaimType="oid"/>
0 голосов
/ 17 февраля 2020

Для входа в клиент Azure AD необходимо, чтобы пользователь, выполняющий поток входа, уже имел атрибут, такой как идентификатор объекта, который будет идентифицировать их в клиенте Azure AD, в который он входит. Идентификаторы объектов каждого пользователя различны для каждого Azure AD-клиента независимо от их root Azure AD-клиента. Этот атрибут не переносится из каталога в каталог, и только процесс регистрации создаст этот атрибут для пользователей в Azure AD.

Поскольку я смог настроить файл пользовательской политики, чтобы пропустить этот шаг, я не смогу получить токен доступа, поскольку пользователи должны go через процесс регистрации, прежде чем они будут получить атрибуты, такие как идентификаторы объектов, которые однозначно идентифицируют каждого пользователя в различных Azure арендаторах AD.

Существующим пользователям в Azure AD B2 C арендаторе не нужно будет проходить процесс регистрации, они могут просто перейти к входу в ваш Azure AD B2 C арендатор, поскольку у них уже есть атрибуты, идентифицирующие их в вашем Azure AD арендаторе.

...