Predicates 및 PredicateValidations

참고 항목

Azure Active Directory B2C에서 사용자 지정 정책은 주로 복잡한 시나리오를 해결하기 위해 설계되었습니다. 대부분의 시나리오에서 기본 제공 사용자 흐름을 사용하는 것이 좋습니다. 아직 수행하지 않았다면 Active Directory B2C에서 사용자 지정 정책 시작하기에서 사용자 지정 정책 스타터 팩에 대해 알아봅니다.

PredicatesPredicateValidations 요소를 사용하면 Azure AD B2C(Azure Active Directory B2C) 테넌트에 적절한 형식의 데이터만 입력하도록 유효성 검사 프로세스를 수행할 수 있습니다.

다음 다이어그램은 요소 간의 관계를 보여 줍니다.

조건자 및 조건자 유효성 검사 관계를 보여 주는 다이어그램

조건자

조건자 요소는 클레임 형식의 값을 검사 반환하거나 false반환 true 하는 기본 유효성 검사를 정의합니다. 유효성 검사는 지정된 메서드 요소와 메서드와 관련된 매개 변수 요소 집합을 사용하여 수행됩니다. 예를 들어 조건자는 문자열 클레임 값의 길이가 지정된 최소 및 최대 매개 변수 범위 내에 있는지 또는 문자열 클레임 값에 문자 집합이 포함되어 있는지 여부를 검사 수 있습니다. UserHelpText 요소는 검사 실패하는 경우 사용자에게 오류 메시지를 제공합니다. UserHelpText 요소의 값은 언어 사용자 지정을 사용하여 지역화할 수 있습니다.

Predicates 요소는 BuildingBlocks 요소 내에서 ClaimsSchema 요소 바로 다음에 나와야 합니다.

Predicates 요소에는 다음 요소가 포함됩니다.

요소 발생 설명
Predicate 1:n 조건자 목록입니다.

조건자 요소에는 다음 특성이 포함됩니다.

특성 필수 설명
ID 조건자에 사용되는 식별자입니다. 다른 요소는 정책에서 이 식별자를 사용할 수 있습니다.
메서드 유효성 검사에 사용할 메서드 형식입니다. 가능한 값은 IsLengthRange, MatchesRegex, IncludesCharacters 또는 IsDateRange입니다.
HelpText 아니요 검사 실패하는 경우 사용자에 대한 오류 메시지입니다. 언어 사용자 지정을 통해 이 문자열을 지역화할 수 있습니다.

Predicate 요소에는 다음 요소가 포함됩니다.

요소 발생 설명
UserHelpText 0:1 (사용되지 않음) 검사 실패하는 경우 사용자에 대한 오류 메시지입니다.
매개 변수 1:1 문자열 유효성 검사의 메서드 형식에 대한 매개 변수입니다.

Parameters 요소에는 다음 요소가 포함됩니다.

요소 발생 설명
매개 변수 1:n 문자열 유효성 검사의 메서드 형식에 대한 매개 변수입니다.

Parameter 요소에는 다음 특성이 포함됩니다.

요소 발생 설명
ID 1:1 매개 변수의 식별자입니다.

조건자 메서드

IsLengthRange

IsLengthRange 메서드는 문자열 클레임 값의 길이가 지정된 최소 및 최대 매개 변수 범위 내에 있는지 여부를 확인합니다. 이 조건자 메서드의 라이브 데모를 확인하세요. 조건자 요소는 다음 매개 변수를 지원합니다.

매개 변수 필수 설명
최대 입력할 수 있는 최대 문자 수입니다.
최소 입력해야 하는 최소 문자 수입니다.

다음 예제에서는 매개 변수 Minimum 가 있는 IsLengthRange 메서드를 보여 하며 Maximum 문자열의 길이 범위를 지정합니다.

<Predicate Id="IsLengthBetween8And64" Method="IsLengthRange" HelpText="The password must be between 8 and 64 characters.">
  <Parameters>
    <Parameter Id="Minimum">8</Parameter>
    <Parameter Id="Maximum">64</Parameter>
  </Parameters>
</Predicate>

MatchesRegex

MatchesRegex 메서드는 문자열 클레임 값이 정규식과 일치하는지 여부를 검사. 이 조건자 메서드의 라이브 데모를 확인하세요. 조건자 요소는 다음 매개 변수를 지원합니다.

매개 변수 필수 설명
RegularExpression 일치 항목을 찾을 정규식 패턴입니다.

다음 예제에서는 정규식을 지정하는 매개 변수 RegularExpression 가 있는 메서드를 보여줍니다MatchesRegex.

<Predicate Id="PIN" Method="MatchesRegex" HelpText="The password must be numbers only.">
  <Parameters>
    <Parameter Id="RegularExpression">^[0-9]+$</Parameter>
  </Parameters>
</Predicate>

IncludesCharacters

IncludesCharacters 메서드는 문자열 클레임 값에 문자 집합이 포함되어 있는지 여부를 검사. 이 조건자 메서드의 라이브 데모를 확인하세요. 조건자 요소는 다음 매개 변수를 지원합니다.

매개 변수 필수 설명
CharacterSet 입력할 수 있는 문자 집합입니다. 예를 들어, 소문자 a-z, 대문자 A-Z, 숫자 0-9 또는 기호 목록(예: @#$%^&amp;*\-_+=[]{}|\\:',?/~"();!)입니다.

다음 예제에서는 문자 집합을 IncludesCharacters 지정하는 매개 변수 CharacterSet 가 있는 메서드를 보여줍니다.

<Predicate Id="Lowercase" Method="IncludesCharacters" HelpText="a lowercase letter">
  <Parameters>
    <Parameter Id="CharacterSet">a-z</Parameter>
  </Parameters>
</Predicate>

IsDateRange

IsDateRange 메서드는 날짜 클레임 값이 지정한 최소/최대 매개 변수 범위 사이에 있는지 여부를 확인합니다. 이 조건자 메서드의 라이브 데모를 확인하세요. 조건자 요소는 다음 매개 변수를 지원합니다.

매개 변수 필수 설명
최대 입력할 수 있는 가장 큰 날짜입니다. 날짜 형식은 yyyy-mm-dd 규칙 또는 Today를 따릅니다.
최소 입력할 수 있는 최소 날짜입니다. 날짜 형식은 yyyy-mm-dd 규칙 또는 Today를 따릅니다.

다음 예제에서는 매개 변수 Minimum 가 있는 메서드를 보여 IsDateRange 하며 형식과 Maximum 형식으로 날짜 범위를 yyyy-mm-dd Today지정합니다.

<Predicate Id="DateRange" Method="IsDateRange" HelpText="The date must be between 1970-01-01 and today.">
  <Parameters>
    <Parameter Id="Minimum">1970-01-01</Parameter>
    <Parameter Id="Maximum">Today</Parameter>
  </Parameters>
</Predicate>

PredicateValidations

조건자는 클레임 유형에 대해 검사 유효성 검사를 정의하지만 PredicateValidations 는 조건자 집합을 그룹화하여 클레임 형식에 적용할 수 있는 사용자 입력 유효성 검사를 형성합니다. 각 PredicateValidation 요소에는 조건자를 가리키는 PredicateReference 요소 집합이 포함된 PredicateGroup 요소 집합이 포함되어 있습니다. 유효성 검사에 통과하려면 클레임의 값이 PredicateReference 요소 집합을 포함하는 모든 PredicateGroup에서 조건자의 테스트를 모두 통과해야 합니다.

PredicateValidations 요소는 BuildingBlocks 요소 내Predicates 요소 바로 다음에 나타나야 합니다.

<PredicateValidations>
  <PredicateValidation Id="">
    <PredicateGroups>
      <PredicateGroup Id="">
        <UserHelpText></UserHelpText>
        <PredicateReferences MatchAtLeast="">
          <PredicateReference Id="" />
          ...
        </PredicateReferences>
      </PredicateGroup>
      ...
    </PredicateGroups>
  </PredicateValidation>
...
</PredicateValidations>

PredicateValidations 요소에는 다음 요소가 포함됩니다.

요소 발생 설명
PredicateValidation 1:n 조건자 유효성 검사 목록입니다.

PredicateValidation 요소에는 다음 특성이 포함됩니다.

특성 필수 설명
ID 조건자 유효성 검사에 사용되는 식별자입니다. ClaimType 요소는 정책에서 이 식별자를 사용할 수 있습니다.

PredicateValidation 요소에는 다음과 같은 요소가 포함됩니다.

요소 발생 설명
PredicateGroups 1:n 조건자 그룹 목록입니다.

PredicateGroups 요소에는 다음과 같은 요소가 포함됩니다.

요소 발생 설명
PredicateGroup 1:n 조건자 목록입니다.

PredicateGroup 요소에는 다음 특성이 포함됩니다.

특성 필수 설명
ID 조건자 그룹에 사용되는 식별자입니다.

PredicateGroup 요소에는 다음 요소가 포함됩니다.

요소 발생 설명
UserHelpText 0:1 사용자가 입력해야 하는 값을 파악하는 데 도움이 될 수 있는 조건자의 설명입니다.
PredicateReferences 1:n 조건자 참조 목록입니다.

PredicateReferences 요소에는 다음 특성이 포함됩니다.

특성 필수 설명
MatchAtLeast 아니요 입력이 허용되려면 값이 일치해야 하는 조건자 정의의 최소 수를 지정합니다. 지정하지 않으면 값이 모든 조건자 정의와 일치해야 합니다.

PredicateReferences 요소에는 다음 요소가 포함됩니다.

요소 발생 설명
PredicateReference 1:n 조건자 참조입니다.

PredicateReference 요소에는 다음과 같은 특성이 포함됩니다.

특성 필수 설명
ID 조건자 유효성 검사에 사용되는 식별자입니다.

암호 복잡도 구성

Predicates 및 PredicateValidationsInput을 사용하면 계정을 만들 때 사용자가 제공하는 암호에 대한 복잡성 요구 사항을 제어할 수 있습니다. 기본적으로 Azure AD B2C는 강력한 암호를 사용합니다. 또한 Azure AD B2C는 고객이 사용할 수는 암호의 복잡성을 제어하는 구성 옵션을 지원합니다. 다음 조건자 요소를 사용하여 암호 복잡성을 정의할 수 있습니다.

  • IsLengthBetween8And64(IsLengthRange 메서드 사용)는 암호가 8~64자 사이여야 한다는 유효성을 검사합니다.
  • 메서드를 IncludesCharacters 사용하는 소문자는 암호에 소문자가 포함되어 있는지 확인합니다.
  • Uppercase(IncludesCharacters 메서드 사용)는 암호가 대문자를 포함하는지 유효성을 검사합니다.
  • Number(IncludesCharacters 메서드 사용)는 암호가 숫자를 포함하는지 유효성을 검사합니다.
  • 메서드를 사용하는 기호IncludesCharacters 암호에 여러 기호 문자 중 하나가 포함되어 있음을 확인합니다.
  • 메서드를 사용하는 PINMatchesRegex 암호에 숫자만 포함되는지 확인합니다.
  • 이 메서드를 사용하는 AllowedAADCharactersMatchesRegex 암호가 잘못된 문자만 제공되었는지 확인합니다.
  • 메서드를 MatchesRegex 사용하는 DisallowedWhitespace는 암호가 공백 문자로 시작되거나 끝나지 않는지 확인합니다.
<Predicates>
  <Predicate Id="IsLengthBetween8And64" Method="IsLengthRange" HelpText="The password must be between 8 and 64 characters.">
    <Parameters>
      <Parameter Id="Minimum">8</Parameter>
      <Parameter Id="Maximum">64</Parameter>
    </Parameters>
  </Predicate>

  <Predicate Id="Lowercase" Method="IncludesCharacters" HelpText="a lowercase letter">
    <Parameters>
      <Parameter Id="CharacterSet">a-z</Parameter>
    </Parameters>
  </Predicate>

  <Predicate Id="Uppercase" Method="IncludesCharacters" HelpText="an uppercase letter">
    <Parameters>
      <Parameter Id="CharacterSet">A-Z</Parameter>
    </Parameters>
  </Predicate>

  <Predicate Id="Number" Method="IncludesCharacters" HelpText="a digit">
    <Parameters>
      <Parameter Id="CharacterSet">0-9</Parameter>
    </Parameters>
  </Predicate>

  <Predicate Id="Symbol" Method="IncludesCharacters" HelpText="a symbol">
    <Parameters>
      <Parameter Id="CharacterSet">@#$%^&amp;*\-_+=[]{}|\\:',.?/`~"();!</Parameter>
    </Parameters>
  </Predicate>

  <Predicate Id="PIN" Method="MatchesRegex" HelpText="The password must be numbers only.">
    <Parameters>
      <Parameter Id="RegularExpression">^[0-9]+$</Parameter>
    </Parameters>
  </Predicate>

  <Predicate Id="AllowedAADCharacters" Method="MatchesRegex" HelpText="An invalid character was provided.">
    <Parameters>
      <Parameter Id="RegularExpression">(^([0-9A-Za-z\d@#$%^&amp;*\-_+=[\]{}|\\:',?/`~"();! ]|(\.(?!@)))+$)|(^$)</Parameter>
    </Parameters>
  </Predicate>

  <Predicate Id="DisallowedWhitespace" Method="MatchesRegex" HelpText="The password must not begin or end with a whitespace character.">
    <Parameters>
      <Parameter Id="RegularExpression">(^\S.*\S$)|(^\S+$)|(^$)</Parameter>
    </Parameters>
  </Predicate>

기본 유효성 검사를 정의한 후 함께 결합하고 정책에서 사용할 수 있는 암호 정책 집합을 만들 수 있습니다.

  • SimplePassword는 DisallowedWhitespace, AllowedAADCharacters 및 IsLengthBetween8And64 유효성 검사를 수행합니다.
  • StrongPassword 는 DisallowedWhitespace, AllowedAADCharacters, IsLengthBetween8And64의 유효성을 검사합니다. 마지막 그룹은 CharacterClasses 3으로 설정된 추가 조건자 집합을 실행합니다 MatchAtLeast . 이 경우 사용자 암호는 8~16자 사이여야 하며 소문자, 대문자, 숫자, 기호 중 3가지를 포함해야 합니다.
  • CustomPassword 는 DisallowedWhitespace, AllowedAADCharacters만 유효성을 검사합니다. 따라서 사용자는 문자가 유효한 한 모든 길이로 암호를 제공할 수 있습니다.
<PredicateValidations>
  <PredicateValidation Id="SimplePassword">
    <PredicateGroups>
      <PredicateGroup Id="DisallowedWhitespaceGroup">
        <PredicateReferences>
          <PredicateReference Id="DisallowedWhitespace" />
        </PredicateReferences>
      </PredicateGroup>
      <PredicateGroup Id="AllowedAADCharactersGroup">
        <PredicateReferences>
          <PredicateReference Id="AllowedAADCharacters" />
        </PredicateReferences>
      </PredicateGroup>
      <PredicateGroup Id="LengthGroup">
        <PredicateReferences>
          <PredicateReference Id="IsLengthBetween8And64" />
        </PredicateReferences>
      </PredicateGroup>
    </PredicateGroups>
  </PredicateValidation>

  <PredicateValidation Id="StrongPassword">
    <PredicateGroups>
      <PredicateGroup Id="DisallowedWhitespaceGroup">
        <PredicateReferences>
          <PredicateReference Id="DisallowedWhitespace" />
       </PredicateReferences>
      </PredicateGroup>
      <PredicateGroup Id="AllowedAADCharactersGroup">
        <PredicateReferences>
          <PredicateReference Id="AllowedAADCharacters" />
        </PredicateReferences>
      </PredicateGroup>
      <PredicateGroup Id="LengthGroup">
        <PredicateReferences>
          <PredicateReference Id="IsLengthBetween8And64" />
        </PredicateReferences>
      </PredicateGroup>
      <PredicateGroup Id="CharacterClasses">
        <UserHelpText>The password must have at least 3 of the following:</UserHelpText>
        <PredicateReferences MatchAtLeast="3">
          <PredicateReference Id="Lowercase" />
          <PredicateReference Id="Uppercase" />
          <PredicateReference Id="Number" />
          <PredicateReference Id="Symbol" />
        </PredicateReferences>
      </PredicateGroup>
    </PredicateGroups>
  </PredicateValidation>

  <PredicateValidation Id="CustomPassword">
    <PredicateGroups>
      <PredicateGroup Id="DisallowedWhitespaceGroup">
        <PredicateReferences>
          <PredicateReference Id="DisallowedWhitespace" />
        </PredicateReferences>
      </PredicateGroup>
      <PredicateGroup Id="AllowedAADCharactersGroup">
        <PredicateReferences>
          <PredicateReference Id="AllowedAADCharacters" />
        </PredicateReferences>
      </PredicateGroup>
    </PredicateGroups>
  </PredicateValidation>
</PredicateValidations>

클레임 형식에서 PredicateValidationReference 요소를 추가하고 식별자를 SimplePassword, StrongPassword 또는 CustomPassword와 같은 조건자 유효성 검사 중 하나로 지정합니다.

<ClaimType Id="password">
  <DisplayName>Password</DisplayName>
  <DataType>string</DataType>
  <AdminHelpText>Enter password</AdminHelpText>
  <UserHelpText>Enter password</UserHelpText>
  <UserInputType>Password</UserInputType>
  <PredicateValidationReference Id="StrongPassword" />
</ClaimType>

다음은 Azure AD B2C에서 오류 메시지를 표시할 때 요소를 구성하는 방법을 보여 줍니다.

Predicate 및 PredicateGroup 암호 복잡성 예제 다이어그램

날짜 범위 구성

PredicatesPredicateValidations 요소를 사용하여 DateTimeDropdownUserInputType최소 및 최대 날짜 값을 제어할 수 있습니다. 이렇게 하려면 메서드를 사용하여 조건 IsDateRange 자를 만들고 최소 및 최대 매개 변수를 제공합니다.

<Predicates>
  <Predicate Id="DateRange" Method="IsDateRange" HelpText="The date must be between 01-01-1980 and today.">
    <Parameters>
      <Parameter Id="Minimum">1980-01-01</Parameter>
      <Parameter Id="Maximum">Today</Parameter>
    </Parameters>
  </Predicate>
</Predicates>

DateRange 조건자에 대한 참조를 포함하는 PredicateValidation을 추가합니다.

<PredicateValidations>
  <PredicateValidation Id="CustomDateRange">
    <PredicateGroups>
      <PredicateGroup Id="DateRangeGroup">
        <PredicateReferences>
          <PredicateReference Id="DateRange" />
        </PredicateReferences>
      </PredicateGroup>
    </PredicateGroups>
  </PredicateValidation>
</PredicateValidations>

클레임 형식에서 PredicateValidationReference 요소를 추가하고 식별자를 .로 CustomDateRange지정합니다.

<ClaimType Id="dateOfBirth">
  <DisplayName>Date of Birth</DisplayName>
  <DataType>date</DataType>
  <AdminHelpText>The user's date of birth.</AdminHelpText>
  <UserHelpText>Your date of birth.</UserHelpText>
  <UserInputType>DateTimeDropdown</UserInputType>
  <PredicateValidationReference Id="CustomDateRange" />
</ClaimType>

다음 단계