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

重要

自 2025 年 5 月 1 日起,Azure AD B2C 将不再可供新客户购买。 在我们的常见问题解答中了解详细信息

备注

在 Azure Active Directory B2C 中,自定义策略 主要用于解决复杂场景。 对于大多数场景,我们建议您使用内置的用户流。 如果未这样做,请通过 Active Directory B2C 中的自定义策略入门来了解自定义策略初学者包。

验证技术配置文件是任何协议中的普通技术配置文件,例如 Microsoft Entra IDREST API。 验证技术配置文件返回输出声明,或返回 4xx HTTP 状态代码,其中包含以下数据。 有关详细信息,请参阅 返回错误消息

{
    "version": "1.0.0",
    "status": 409,
    "userMessage": "Your error message"
}

验证技术配置文件的输出声明的范围仅限于调用验证技术配置文件及其验证技术 配置文件的自断言技术配置文件 。 如果要在下一个业务流程步骤中使用输出声明,请将输出声明添加到调用验证技术配置文件的自断言技术配置文件。

验证技术配置文件在 ValidationTechnicalProfiles 元素中显示的序列中执行。 可以在验证技术配置文件中配置,如果验证技术配置文件引发错误或成功,是否应继续执行任何后续验证技术配置文件。

可以根据 ValidationTechnicalProfile 元素中定义的先决条件有条件地执行验证技术配置文件。 例如,可以检查特定声明是否存在,或者声明是否等于指定的值。

自断言技术配置文件可以定义用于验证部分或全部输出声明的验证技术配置文件。 引用的技术配置文件的所有输入声明都必须显示在引用验证技术配置文件的输出声明中。

备注

只有自断言技术配置文件可以使用验证技术配置文件。 如果需要验证来自非自断言技术配置文件的输出声明,请考虑在用户旅程中使用额外的业务流程步骤来适应负责验证的技术配置文件。

ValidationTechnicalProfiles

ValidationTechnicalProfiles 元素包含以下元素:

元素 出现次数 DESCRIPTION
ValidationTechnicalProfile 1:n 用于验证引用技术配置文件的某些或全部输出声明的技术配置文件。

ValidationTechnicalProfile 元素包含以下属性:

特征 必选 DESCRIPTION
参考编号 是的 策略或父策略中已定义的技术配置文件的标识符。
ContinueOnError 指示如果此验证技术配置文件引发错误,则是否应继续验证任何后续验证技术配置文件。 可能的值: truefalse (默认值,进一步验证配置文件的处理将停止并返回错误)。
ContinueOnSuccess 指示如果此验证技术配置文件成功,则是否应继续验证任何后续验证配置文件。 可能的值:truefalse。 默认值为 true,这意味着进一步验证配置文件的处理将继续。

备注

目前,如果将 ClaimsTransformation 类型的验证技术配置文件的 ContinueOnError 设置为 false,则技术配置文件不遵循该设置。 若要解决此问题,请改用前置条件。

ValidationTechnicalProfile 元素包含以下元素:

元素 出现次数 DESCRIPTION
前提 条件 0:1 必须满足验证技术配置文件才能执行的先决条件列表。

Precondition 元素包含以下属性:

特征 必选 DESCRIPTION
Type 是的 要针对前置条件执行的检查或查询的类型。 指定任一 ClaimsExist 作以确保在用户的当前声明集中存在指定的声明时应执行作,或者 ClaimEquals 指定在指定声明存在且其值等于指定值时应执行这些作。
ExecuteActionsIf 是的 指示在测试为 true 还是 false 时应执行前置条件中的作。

Precondition 元素包含以下元素:

元素 出现次数 DESCRIPTION
价值 1:n 检查使用的数据。 如果此检查的类型为 ClaimsExist,此字段指定要查询的 ClaimTypeReferenceId。 如果检查的类型为 ClaimEquals,此字段指定要查询的 ClaimTypeReferenceId。 而另一个值元素包含要检查的值。
行动 1:1 如果业务流程步骤中的前置条件检查为 true,则应执行的作。 的值设置为 SkipThisValidationTechnicalProfile。 指定不应执行关联的验证技术配置文件。

示例:

以下示例使用这些验证技术配置文件:

  1. 第一个验证技术配置文件会检查用户凭据,如果发生错误(例如用户名无效或密码错误),则不会继续。
  2. 下一个验证技术配置文件,如果 userType 声明不存在,或者 userType 的值为 Partner,则不执行。 验证技术配置文件尝试从内部客户数据库读取用户配置文件,并在发生错误时继续,例如 REST API 服务不可用或任何内部错误。
  3. 如果 userType 声明不存在,或者 userType 的值为 Customer,则不执行最后一个验证技术配置文件。 验证技术配置文件尝试从内部合作伙伴数据库读取用户配置文件,并在发生错误(例如 REST API 服务不可用或任何内部错误)时继续。
<ValidationTechnicalProfiles>
  <ValidationTechnicalProfile ReferenceId="login-NonInteractive" ContinueOnError="false" />
  <ValidationTechnicalProfile ReferenceId="REST-ReadProfileFromCustomersDatabase" ContinueOnError="true" >
    <Preconditions>
      <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
        <Value>userType</Value>
        <Action>SkipThisValidationTechnicalProfile</Action>
      </Precondition>
      <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
        <Value>userType</Value>
        <Value>Partner</Value>
        <Action>SkipThisValidationTechnicalProfile</Action>
      </Precondition>
    </Preconditions>
  </ValidationTechnicalProfile>
  <ValidationTechnicalProfile ReferenceId="REST-ReadProfileFromPartnersDatabase" ContinueOnError="true" >
    <Preconditions>
      <Precondition Type="ClaimsExist" ExecuteActionsIf="false">
        <Value>userType</Value>
        <Action>SkipThisValidationTechnicalProfile</Action>
      </Precondition>
      <Precondition Type="ClaimEquals" ExecuteActionsIf="true">
        <Value>userType</Value>
        <Value>Customer</Value>
        <Action>SkipThisValidationTechnicalProfile</Action>
      </Precondition>
    </Preconditions>
  </ValidationTechnicalProfile>
</ValidationTechnicalProfiles>