你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure Active Directory B2C 自定义策略中定义 CAPTCHA 技术配置文件

注意

在 Azure Active Directory B2C 中,自定义策略主要用于解决复杂的情况。 在大多数情况下,建议你使用内置用户流。 如果尚未这样做,请从 Active Directory B2C 中的自定义策略入门了解自定义策略新手包。

一个完全自动化的公共图灵测试,用于告知计算机和人类分离(CAPTCHA)技术配置文件使 Azure Active Directory B2C(Azure AD B2C)能够防止自动攻击。 Azure AD B2C 的 CAPTCHA 技术配置文件支持音频和视频 CAPTCHA 质询类型。

协议

“Protocol”元素的“Name”属性必须设置为 Proprietary。 处理程序属性必须包含 Azure AD B2C 用于 CAPTCHA 的协议处理程序程序集的完全限定名称:Web.TPEngine.Providers.CaptchaProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

注意

此功能以公共预览版提供

下面的示例显示了电子邮件注册的自断言技术配置文件:

<TechnicalProfile Id="HIP-GetChallenge">
  <DisplayName>Email signup</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.CaptchaProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />

CAPTCHA 技术配置文件操作

CAPTCHA 技术配置文件操作有两个操作:

  • 获取质询操作将生成 CAPTCHA 代码字符串,然后使用 CAPTCHA 显示控件在用户界面上显示它。 显示包括输入文本框。 此操作将指示用户输入他们在输入文本框中看到或听到的字符。 用户可以根据需要在视觉和音频质询类型之间进行切换。

  • 验证代码操作 验证用户输入的字符。

获取挑战

第一个操作生成 CAPTCHA 代码字符串,然后将其显示在用户界面上。

输入声明

InputClaims 元素包含要发送到 Azure AD B2C CAPTCHA 服务的声明列表。

ClaimReferenceId 必选 说明
challengeType CAPTCHA 质询类型、音频或视觉对象(默认值)。
azureregion 为 CAPTCHA 质询请求提供服务的服务区域。

显示声明

DisplayClaims 元素包含要在屏幕上显示的声明列表,供用户查看。 例如,用户会显示要读取的 CAPTCHA 质询代码。

ClaimReferenceId 必选 说明
challengeString CAPTCHA 质询代码。

输出声明

OutputClaims 元素包含 CAPTCHA 技术配置文件返回的声明列表。

ClaimReferenceId 必选 说明
challengeId CAPTCHA 质询代码的唯一标识符。
challengeString CAPTCHA 质询代码。
azureregion 为 CAPTCHA 质询请求提供服务的服务区域。

元数据

Attribute 必须 说明
操作 值必须是 GetChallenge
品牌 值必须是 HIP

示例:生成 CAPTCHA 代码

以下示例显示了用于生成代码的 CAPTCHA 技术配置文件:

<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>

验证质询

第二个操作验证 CAPTCHA 质询。

输入声明

InputClaims 元素包含要发送到 Azure AD B2C CAPTCHA 服务的声明列表。

ClaimReferenceId 必选 说明
challengeType CAPTCHA 质询类型、音频或视觉对象(默认值)。
challengeId 用于会话验证的 CAPTCHA 的唯一标识符。 从 GetChallenge 调用填充。
captchaEntered 用户输入到用户界面上质询文本框的挑战代码。
azureregion 为 CAPTCHA 质询请求提供服务的服务区域。 从 GetChallenge 调用填充。

显示声明

DisplayClaims 元素包含要在屏幕上显示的声明列表,用于从用户收集输入。

ClaimReferenceId 必选 说明
captchaEntered 用户输入的 CAPTCHA 质询代码。

输出声明

OutputClaims 元素包含 captcha 技术配置文件返回的声明列表。

ClaimReferenceId 必选 说明
challengeId 用于会话验证的 CAPTCHA 的唯一标识符。
isCaptchaSolved 指示是否已成功解决 CAPTCHA 质询的标志。
reason 用于与用户通信,无论尝试解决挑战是否成功。

元数据

Attribute 必须 说明
操作 值必须是 VerifyChallenge
品牌 值必须是 HIP

示例:验证 CAPTCHA 代码

以下示例演示了用于验证 CAPTCHA 代码的 CAPTCHA 技术配置文件:

  <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>

后续步骤