Azure AD B2 C Зарегистрироваться с приглашением по электронной почте не отображается страница регистрации - PullRequest
1 голос
/ 18 января 2020

Я включил поток подписки с приглашением по электронной почте в свой проект, следуя этому Azure AD B2 C образцу от Microsoft:

https://github.com/azure-ad-b2c/samples/tree/master/policies/invite

По тестовым причинам я устанавливаю параметр redirect_uri URL-адреса приглашения на https://jwt.ms, и мое ожидание рабочего процесса:

  1. Нажатие на URL-адрес приглашения приводит меня к b2clogin
  2. Azure B2 C проверяет токен подсказки идентификатора
  3. Я попадаю на страницу регистрации с предварительно заполненными значениями в подсказке токена идентификатора
  4. После После успешной регистрации я перенаправлен на https://jwt.ms

Однако мои ожидания не оправдались, и после нажатия на URL приглашения я сразу же получаю https://jwt.ms с токеном JWT, содержащим номер приглашения (более подробно ниже) и идентификатор объекта (под) одного из ранее созданных профилей в AD, плюс стандартные утверждения, такие как exp, aud, et c.

Я подозреваю, что в моем понимании есть пробел как функция приглашения рабочего процесса. На какие области кода / политики следует обратить внимание и изменить их, чтобы обеспечить успешную регистрацию приглашения?

Некоторые дополнительные сведения:

  1. Я включил номер приглашения в подсказку идентификатора токена. и НЕ электронная почта, поэтому ReadOnlyEmail заменяется InvitationNumber в рамках пользовательской политики.
  2. Я скопировал поля из моей обычной политики регистрации в политику приглашений, ожидая, что его пользователь должен иметь возможность подписываться с любыми электронными письмами, которые ему нравятся, если это подтверждено B2 C (отсюда и " False "удаляется из примера технического профиля для регистрации приглашения)
  3. Номер приглашения также задается как выходная заявка для моего приложения для его обработки после получения токена JWT из B2 C.
  4. Политика приглашений использует ту же базу политик, что и моя обычная регистрация / вход.
  5. В базе общих политик я добавил нового поставщика утверждений для проверки подсказки токена идентификатора рядом с моим обычным JwtIssuer, который ссылается на сертификат подписи, который мое приложение использует для подписи подсказки токена идентификатора и использует его в последнем шаг пользователя SignUpInvitation. Я не уверен, что это правильно, но как только я использую JwtIssuer, я получаю ошибку в B2 C, что он не может проверить подпись подсказки токена ID.
  6. Технический профиль для регистрации и вызывается из путешествия пользователя:
    <TechnicalProfile Id="LocalAccountSignUpWithInvitationToken">
      <DisplayName>Email signup</DisplayName>
      <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
      <Metadata>
        <Item Key="IpAddressClaimReferenceId">IpAddress</Item>
        <Item Key="ContentDefinitionReferenceId">api.localaccountsignup</Item>
        <Item Key="language.button_continue">Create</Item>
      </Metadata>
      <InputClaimsTransformations>
        <InputClaimsTransformation ReferenceId="CopyInvitationToken" />
      </InputClaimsTransformations>
      <InputClaims>
        <InputClaim ClaimTypeReferenceId="extension_InvitationToken" />
        <InputClaim ClaimTypeReferenceId="email" />
      </InputClaims>
      <OutputClaims>
        <OutputClaim ClaimTypeReferenceId="objectId" />
        <OutputClaim ClaimTypeReferenceId="email" PartnerClaimType="Verified.Email" Required="true" />
        <OutputClaim ClaimTypeReferenceId="newPassword" Required="true" />
        <OutputClaim ClaimTypeReferenceId="reenterPassword" Required="true" />
        <OutputClaim ClaimTypeReferenceId="executed-SelfAsserted-Input" DefaultValue="true" />
        <OutputClaim ClaimTypeReferenceId="authenticationSource" />
        <OutputClaim ClaimTypeReferenceId="newUser" />

        <!-- Optional claims, to be collected from the user -->
        <OutputClaim ClaimTypeReferenceId="givenName" />
        <OutputClaim ClaimTypeReferenceId="surName" />
        <OutputClaim ClaimTypeReferenceId="extension_InvitationToken" />
      </OutputClaims>
      <ValidationTechnicalProfiles>
        <ValidationTechnicalProfile ReferenceId="AAD-UserWriteUsingLogonEmail" />
      </ValidationTechnicalProfiles>
      <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" />
    </TechnicalProfile>      

7. Путешествие пользователя:

  <UserJourneys>
    <UserJourney Id="SignUpInvitation">
      <OrchestrationSteps>
        <!--Read the input claims from the id_token_hint-->
        <OrchestrationStep Order="1" Type="GetClaims" CpimIssuerTechnicalProfileReferenceId="IdTokenHint_ExtractClaims" />
        <!-- Check if user tries to run the policy without invitation -->
        <OrchestrationStep Order="2" Type="ClaimsExchange">
         <Preconditions>
            <Precondition Type="ClaimsExist" ExecuteActionsIf="true">
              <Value>extension_InvitationToken</Value>
              <Action>SkipThisOrchestrationStep</Action>
            </Precondition>
          </Preconditions>        
          <ClaimsExchanges>
            <ClaimsExchange Id="SelfAsserted-Unsolicited" TechnicalProfileReferenceId="SelfAsserted-Unsolicited"/>
          </ClaimsExchanges>
        </OrchestrationStep>
        <!-- Self-asserted sign-up page -->
        <OrchestrationStep Order="3" Type="ClaimsExchange">
          <ClaimsExchanges>
            <ClaimsExchange Id="LocalAccountSignUpWithInvitationToken" TechnicalProfileReferenceId="LocalAccountSignUpWithInvitationToken"/>
          </ClaimsExchanges>
        </OrchestrationStep>
        <!-- Issue an access token-->
        <OrchestrationStep Order="4" Type="SendClaims" CpimIssuerTechnicalProfileReferenceId="JwtIdTokenHintValidator"/>
      </OrchestrationSteps>
      <ClientDefinition ReferenceId="DefaultWeb"/>
    </UserJourney>
  </UserJourneys>

1 Ответ

2 голосов
/ 20 января 2020

Измените <UseTechnicalProfileForSessionManagement ReferenceId="SM-AAD" /> на <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />. Похоже, вы пропускаете страницу из-за единого входа.

https://github.com/azure-ad-b2c/samples/blob/master/policies/invite/policy/SignUpInvitation.xml#L100

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...