Поделиться через


Включение CAPTCHA в Azure Active Directory B2C

Это важно

Начиная с 1 мая 2025 г. Azure AD B2C больше не будет доступен для приобретения для новых клиентов. Дополнительные сведения см. в разделе "Вопросы и ответы".

Прежде чем начать, используйте селектор типа политики в верхней части этой страницы, чтобы выбрать тип политики, которую вы настроите. Azure Active Directory B2C предлагает два метода определения способа взаимодействия пользователей с вашими приложениями: с помощью предопределенных потоков пользователей или полностью настраиваемых пользовательских политик. Действия, которые необходимо выполнить, отличаются для каждого метода.

Azure Active Directory B2C (Azure AD B2C) позволяет включить CAPTCHA, чтобы предотвратить автоматизированные атаки на приложения, ориентированные на взаимодействие с потребителями. Azure AD B2C CAPTCHA поддерживает как звуковые, так и визуальные задания. Эту функцию безопасности можно включить в потоках регистрации и входа для локальных учетных записей. CAPTCHA не используется для входа поставщиков социальных удостоверений.

Примечание.

Эта функция доступна в общедоступной предварительной версии

Предпосылки

Включить CAPTCHA

  1. Войдите на портал Azure.

  2. Если у вас есть доступ к нескольким клиентам, щелкните значок Настройки в верхнем меню, чтобы переключиться на клиент Azure AD B2C из меню Каталоги и подписки.

  3. В меню слева выберите Azure AD B2C. Или выберите все службы и найдите и выберите Azure AD B2C.

  4. Выберите потоки пользователей.

  5. Выберите поток пользователя, для которого требуется включить CAPTCHA. Например, B2C_1_signinsignup.

  6. Выберите Свойства.

  7. В разделе CAPTCHA (предварительная версия) выберите поток, для которого необходимо включить CAPTCHA, например включить CAPTCHA — регистрация.

  8. Выберите Сохранить.

Тестирование потока пользователя

Выполните действия, описанные в разделе "Тестирование потока пользователя" , чтобы проверить и убедиться, что CAPTCHA включен для выбранного потока. Вам будет предложено ввести символы, которые вы видите или услышите в зависимости от выбранного типа CAPTCHA (визуального элемента или звука).

Чтобы включить CAPTCHA в настраиваемой политике, необходимо обновить существующие файлы пользовательской политики. Если у вас нет существующих пользовательских файлов политики, скачайте файл .zip или клонируйте репозиторий из https://github.com/Azure-Samples/active-directory-b2c-custom-policy-starterpack. В этой статье мы обновим XML-файлы в папке /Display Controls Starterpack/LocalAccounts/ .

Объявление утверждений

Чтобы включить CAPTCHA в настраиваемой политике, вам потребуется больше утверждений:

  1. В VS Code откройте файл TrustFrameworkBase.XML .

  2. Объявите утверждения в разделе ClaimsSchema с помощью следующего кода:

     <!--<ClaimsSchema>-->
      ...
      <ClaimType Id="inputSolution">
        <DataType>string</DataType>
      </ClaimType>
    
      <ClaimType Id="solved">
        <DataType>boolean</DataType>
      </ClaimType>
    
      <ClaimType Id="reason">
        <DataType>string</DataType>
      </ClaimType>
    
      <ClaimType Id="azureregion">
        <DataType>string</DataType>
      </ClaimType>
    
      <ClaimType Id="challengeId">
        <DisplayName>The ID of the generated captcha</DisplayName>
        <DataType>string</DataType>
        <UserHelpText>Captcha challenge identifier</UserHelpText>
        <UserInputType>Paragraph</UserInputType>
      </ClaimType>
    
      <ClaimType Id="challengeType">
        <DisplayName>Type of captcha (visual / audio)</DisplayName>
        <DataType>string</DataType>
        <UserHelpText>Captcha challenge type</UserHelpText>
        <UserInputType>Paragraph</UserInputType>
      </ClaimType>
    
      <ClaimType Id="challengeString">
        <DisplayName>Captcha challenge code</DisplayName>
        <DataType>string</DataType>
        <UserHelpText>Captcha challenge code</UserHelpText>
        <UserInputType>Paragraph</UserInputType>
      </ClaimType>
    
      <ClaimType Id="captchaEntered">
        <DisplayName>Captcha entered by the user</DisplayName>
        <DataType>string</DataType>
        <UserHelpText>Enter the characters you see</UserHelpText>
        <UserInputType>TextBox</UserInputType>
      </ClaimType>
    
      <ClaimType Id="isCaptchaSolved">
        <DisplayName>Flag indicating that the captcha was successfully solved</DisplayName>
        <DataType>boolean</DataType>
      </ClaimType>
    
      <ClaimType Id="mfaCaptchaEnabled">
        <DisplayName>flag used to control captcha enabled in MFA</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
    
      <ClaimType Id="signupCaptchaEnabled">
        <DisplayName>flag used to control captcha enabled during signup</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
    
      <ClaimType Id="signinCaptchaEnabled">
        <DisplayName>flag used to control captcha enabled during signin</DisplayName>
        <DataType>string</DataType>
      </ClaimType>
      ...
     <!--<ClaimsSchema>-->
    

Настройка элемента управления отображением

Чтобы включить CAPTCHA для настраиваемой политики, используйте элемент управления отображением CAPTCHA. Элемент управления отображением CAPTCHA создает и отрисовывает изображение CAPTCHA.

В файле TrustFrameworkBase.XML найдите DisplayControls элемент, а затем добавьте следующий элемент управления отображения в качестве дочернего элемента. Если у вас еще нет DisplayControls элемента, добавьте его.

<!--<DisplayControls>-->
...    
<DisplayControl Id="captchaControlChallengeCode" UserInterfaceControlType="CaptchaControl" DisplayName="Help us beat the bots">    
    <InputClaims>
        <InputClaim ClaimTypeReferenceId="challengeType" />
        <InputClaim ClaimTypeReferenceId="challengeId" />
    </InputClaims>

    <DisplayClaims>
        <DisplayClaim ClaimTypeReferenceId="challengeType" ControlClaimType="ChallengeType" />
        <DisplayClaim ClaimTypeReferenceId="challengeId" ControlClaimType="ChallengeId" />
        <DisplayClaim ClaimTypeReferenceId="challengeString" ControlClaimType="ChallengeString" />
        <DisplayClaim ClaimTypeReferenceId="captchaEntered" ControlClaimType="CaptchaEntered" />
    </DisplayClaims>

    <Actions>
    <Action Id="GetChallenge">
        <ValidationClaimsExchange>
        <ValidationClaimsExchangeTechnicalProfile
            TechnicalProfileReferenceId="HIP-GetChallenge" />
        </ValidationClaimsExchange>
    </Action>

    <Action Id="VerifyChallenge">
        <ValidationClaimsExchange>
        <ValidationClaimsExchangeTechnicalProfile
            TechnicalProfileReferenceId="HIP-VerifyChallenge" />
        </ValidationClaimsExchange>
    </Action>
    </Actions>
</DisplayControl> 
...
<!--</DisplayControls>-->

Настройка технического профиля CAPTCHA

Azure AD B2C проверяет задачу CAPTCHA с помощью технического профиля CAPTCHA. Этот технический профиль может создать код CAPTCHA или проверить его в зависимости от настройки.

В файле TrustFrameworkBase.XML найдите ClaimsProviders элемент и добавьте поставщика утверждений с помощью следующего кода:

<!--<ClaimsProvider>-->
...
<ClaimsProvider>

    <DisplayName>HIPChallenge</DisplayName>

    <TechnicalProfiles>

    <TechnicalProfile Id="HIP-GetChallenge">
        <DisplayName>GetChallenge</DisplayName>
        <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.CaptchaProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
        <Metadata>
            <Item Key="Operation">GetChallenge</Item>
            <Item Key="Brand">HIP</Item>
        </Metadata>
        <InputClaims>
            <InputClaim ClaimTypeReferenceId="challengeType" />
        </InputClaims>
        <DisplayClaims>
            <DisplayClaim ClaimTypeReferenceId="challengeString" />
        </DisplayClaims>
        <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="challengeId" />
            <OutputClaim ClaimTypeReferenceId="challengeString" PartnerClaimType="ChallengeString" />
            <OutputClaim ClaimTypeReferenceId="azureregion" />
        </OutputClaims>
    </TechnicalProfile>
    <TechnicalProfile Id="HIP-VerifyChallenge">
        <DisplayName>Verify Code</DisplayName>
        <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.CaptchaProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
        <Metadata>
        <Item Key="Brand">HIP</Item>
            <Item Key="Operation">VerifyChallenge</Item>
        </Metadata>
        <InputClaims>
            <InputClaim ClaimTypeReferenceId="challengeType" DefaultValue="Visual" />
            <InputClaim ClaimTypeReferenceId="challengeId" />
            <InputClaim ClaimTypeReferenceId="captchaEntered" PartnerClaimType="inputSolution" Required="true" />
            <InputClaim ClaimTypeReferenceId="azureregion" />
        </InputClaims>
        <DisplayClaims>
            <DisplayClaim ClaimTypeReferenceId="captchaEntered" />
        </DisplayClaims>
        <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="challengeId" />
            <OutputClaim ClaimTypeReferenceId="isCaptchaSolved" PartnerClaimType="solved" />
            <OutputClaim ClaimTypeReferenceId="reason" PartnerClaimType="reason" />
        </OutputClaims>
    </TechnicalProfile>
    </TechnicalProfiles>
</ClaimsProvider>    
...
<!--<ClaimsProviders>-->

Технический профиль CAPTCHA, настроенный с помощью операции GetChallenge , создает и отображает строку вызова CAPTCHA. Технический профиль CAPTCHA, настроенный с помощью VerifyChallenge, проверяет строку проверки, которую пользователь вводит.

Обновление макетов страниц определения контента

Для различных макетов страниц используйте следующие версии макета страницы:

Макет страницы Диапазон версий макета страницы
Самоутвержденный >=2.1.33
Unifiedssp >=2.1.21
Многофакторная >=1.2.19

Пример:

В файле TrustFrameworkBase.XML, в элементе ContentDefinitions, найдите определение содержимого с Id="api.localaccountsignup", а затем обновите его DataUri, как показано в следующем коде:

<!---<ContentDefinitions>-->
...
<ContentDefinition Id="api.localaccountsignup">
    ...
    <!--Update this DataUri-->
    <DataUri>urn:com:microsoft:aad:b2c:elements:contract:selfasserted:2.1.27</DataUri>
    ...
</ContentDefinition>
...
<!---</ContentDefinitions>-->

Мы указываем версию макета страницы, самостоятельно утвержденную, как 2.1.27.

После настройки технических профилей и элементов управления отображением можно указать поток, для которого необходимо включить CAPTCHA.

Включить CAPTCHA для процесса регистрации или входа

Чтобы включить CAPTCHA для потока регистрации или входа, выполните следующие действия.

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

  2. В техническом профиле, например LocalAccountSignUpWithLogonEmail, добавьте ключ метаданных и запись отображаемого утверждения, как показано в следующем коде:

<TechnicalProfile Id="LocalAccountSignUpWithLogonEmail">
    ...
  <Metadata>
    ...
    <!--Add this metadata entry. Set value to true to activate CAPTCHA-->
    <Item Key="setting.enableCaptchaChallenge">true</Item>
    ...
  </Metadata>
    ...
  <DisplayClaims>
    ...
    <!--Add this display claim, which is a reference to the captcha display control-->
    <DisplayClaim DisplayControlReferenceId="captchaControlChallengeCode" /> 
    ...
  </DisplayClaims>
    ...
</TechnicalProfile>

Запись утверждения отображения ссылается на элемент управления отображением, настроенный ранее.

Включение CAPTCHA в потоке MFA

Чтобы включить CAPTCHA в потоке MFA, необходимо внести изменения в два технических профиля: самоподтверждаемом техническом профиле и в техническом профиле телефонного фактора.

  1. Проверьте пользовательский путь регистрации и входа, например, SignUpOrSignIn, чтобы определить самозаявленный технический профиль и технические профили телефонного фактора, ответственные за поток регистрации и входа.

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

<TechnicalProfile Id="PhoneFactor-InputOrVerify">
    ...
  <Metadata>
    ...
    <!--Add this metadata entry. Value set to true-->
    <Item Key="setting.enableCaptchaChallenge">true</Item>
    ...
  </Metadata>
    ...
  <DisplayClaims>
    ...
    <!--Add this display claim-->
    <DisplayClaim DisplayControlReferenceId="captchaControlChallengeCode" /> 
    ...
  </DisplayClaims>
    ...
</TechnicalProfile>

Включение флага функции CAPTCHA

Чтобы применить CAPTCHA во время регистрации, входа или многофакторной аутентификации, необходимо добавить технический профиль, который включает признак функции для каждого сценария, а затем вызвать технический профиль в процессе пользовательского пути.

  1. В файле TrustFrameworkBase.XML найдите ClaimsProviders элемент и добавьте поставщика утверждений с помощью следующего кода:
<!--<ClaimsProvider>-->
...
<ClaimsProvider>

    <DisplayName>Set Feature Flags</DisplayName>

    <TechnicalProfiles>

    <TechnicalProfile Id="SetFeatureDefaultValue">
        <DisplayName>Set Feature Flags</DisplayName>
        <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
        <OutputClaims>
            <OutputClaim ClaimTypeReferenceId="signupCaptchaEnabled" DefaultValue="true" />
            <OutputClaim ClaimTypeReferenceId="signinCaptchaEnabled" DefaultValue="true" />
            <OutputClaim ClaimTypeReferenceId="mfaCaptchaEnabled" DefaultValue="true" />
        </OutputClaims>
    </TechnicalProfile>
    </TechnicalProfiles>
</ClaimsProvider>
...
<!--<ClaimsProviders>-->
  1. Установите DefaultValue на true или false в зависимости от сценария CAPTCHA.

  2. Добавьте технический профиль флагов функций в пользовательский путь, а затем обновите порядок оставшихся шагов оркестрации.

<!--<UserJourneys>-->
...
<UserJourney Id="SignUpOrSignIn">
    <OrchestrationSteps>

        <!--Add this orchestration step-->
        <OrchestrationStep Order="1" Type="ClaimsExchange">
          <ClaimsExchanges>
            <ClaimsExchange Id="SetFeatureDefaultValue" TechnicalProfileReferenceId="SetFeatureDefaultValue" />
          </ClaimsExchanges>
        </OrchestrationStep>
...
<!--<UserJourneys>-->

Отправка файлов настраиваемой политики

Выполните действия, описанные в разделе "Отправка политик " для отправки пользовательских файлов политик.

Проверка настраиваемой политики

Выполните действия, описанные в разделе "Тестирование пользовательской политики", чтобы проверить и убедиться, что CAPTCHA включен для выбранного потока. Вам будет предложено ввести символы, которые вы видите или услышите в зависимости от типа CAPTCHA, визуального элемента или звука.

Примечание.

  • Вы не можете добавить CAPTCHA на шаг MFA в пользовательском потоке, предназначенном только для регистрации.
  • В потоке многофакторной идентификации CAPTCHA применяется, если выбран метод MFA - SMS или телефонный звонок, только SMS, или только звонок.