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


Преобразования утверждений строк

В этой статье приведены примеры использования преобразований утверждений строк схемы Identity Experience Framework в Azure Active Directory B2C (Azure AD B2C). Дополнительные сведения см. в статье о преобразовании утверждений.

AssertStringClaimsAreEqual

Сопоставляет два утверждения и создает исключение, если они не равны, в соответствии с указанными для сравнения элементами inputClaim1, inputClaim2 и stringComparison.

Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaim inputClaim1 строка Тип первого утверждения, которое необходимо сравнить.
InputClaim inputClaim2 строка Тип второго утверждения, которое необходимо сравнить.
InputParameter stringComparison строка сравнение строк, одно из значений: Ordinal, OrdinalIgnoreCase.

Преобразование строк AssertStringClaimsAreEqual всегда выполняется из технического профиля проверки, вызываемого с помощью самоподтвержденного технического профиля, или DisplayControl. Метаданные UserMessageIfClaimsTransformationStringsAreNotEqual самоподтвержденного технического профиля позволяют управлять сообщением об ошибке, представленным пользователю. Сообщения об ошибках можно локализовать.

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

Пример AssertStringClaimsAreEqual

С помощью этого преобразования можно убедиться, что два утверждения имеют одинаковые значения. В противном случае выдается сообщение об ошибке. В следующем примере проверяется, равно ли утверждение strongAuthenticationEmailAddress утверждению email. В противном случае выдается сообщение об ошибке.

<ClaimsTransformation Id="AssertEmailAndStrongAuthenticationEmailAddressAreEqual" TransformationMethod="AssertStringClaimsAreEqual">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="strongAuthenticationEmailAddress" TransformationClaimType="inputClaim1" />
    <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="inputClaim2" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="stringComparison" DataType="string" Value="ordinalIgnoreCase" />
  </InputParameters>
</ClaimsTransformation>
  • Входные утверждения:
    • inputClaim1: someone@contoso.com.
    • inputClaim2: someone@outlook.com.
  • Входные параметры:
    • stringComparison: ordinalIgnoreCase.
  • Результат: возникла ошибка.

Вызов преобразования утверждений AssertStringClaimsAreEqual

Технический профиль проверки login-NonInteractive вызывает преобразование утверждений AssertEmailAndStrongAuthenticationEmailAddressAreEqual.

<TechnicalProfile Id="login-NonInteractive">
  ...
  <OutputClaimsTransformations>
    <OutputClaimsTransformation ReferenceId="AssertEmailAndStrongAuthenticationEmailAddressAreEqual" />
  </OutputClaimsTransformations>
</TechnicalProfile>

Самоподтвержденный технический профиль вызывает технический профиль проверки login-NonInteractive.

<TechnicalProfile Id="SelfAsserted-LocalAccountSignin-Email">
  <Metadata>
    <Item Key="UserMessageIfClaimsTransformationStringsAreNotEqual">Custom error message the email addresses you provided are not the same.</Item>
  </Metadata>
  <ValidationTechnicalProfiles>
    <ValidationTechnicalProfile ReferenceId="login-NonInteractive" />
  </ValidationTechnicalProfiles>
</TechnicalProfile>

BuildUri

Создает URI одноразового пароля с ограниченным сроком действия (TOTP). Универсальный код ресурса (URI) представляет собой сочетание уникального идентификатора пользователя, например адреса электронной почты, и секретного ключа. Затем этот URI преобразуется в QR-код, представляемый пользователю. Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaim path строка Уникальный идентификатор пользователя, например адрес электронной почты, имя пользователя или номер телефона.
InputClaim query.secret строка Секретный ключ TOTP.
InputParameter scheme строка Часть схемы в URI. Например, otpauth.
InputParameter host строка Часть схемы в URI. Например, totp.
InputParameter query.issuer строка Часть имени издателя в URI. Например, {AuthenticatorIssuer}.
outputClaim outputClaim строка Утверждение, которое создается после вызова этого преобразования утверждений.

Пример BuildUri

Следующее преобразование утверждений создает URI TOTP, который будет отображаться в формате QR-кода или глубокой ссылки.

<ClaimsTransformation Id="CreateUriString" TransformationMethod="BuildUri">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="uriLabel" TransformationClaimType="path" />
    <InputClaim ClaimTypeReferenceId="secretKey" TransformationClaimType="query.secret" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="scheme" DataType="string" Value="otpauth" />
    <InputParameter Id="host" DataType="string" Value="totp" />
    <InputParameter Id="query.issuer" DataType="string" Value="{AuthenticatorIssuer}" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="qrCodeContent" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • path: emily@fabrikam.com
    • query.secret: fay2lj7ynpntjgqa
  • Входные параметры:
    • scheme: otpauth
    • host: totp
    • query.issuer: {AuthenticatorIssuer}
  • Выходные утверждения:
    • outputClaim: otpauth://totp/Contoso%20demo:emily@fabrikam.com?secret=fay2lj7ynpntjgqa&issuer=Contoso+demo.

ChangeCase

Изменяет предоставленное утверждение в нижний или верхний регистр в зависимости от оператора. Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaim inputClaim1 строка Утверждение, которое необходимо изменить.
InputParameter toCase строка Одно из следующих значений: LOWER или UPPER.
outputClaim outputClaim строка Утверждение, которое создается после вызова этого преобразования утверждений.

Пример ChangeCase

Следующее преобразование утверждения преобразует регистр утверждения электронной почты в нижний.

<ClaimsTransformation Id="ChangeToLower" TransformationMethod="ChangeCase">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="inputClaim1" />
  </InputClaims>
<InputParameters>
  <InputParameter Id="toCase" DataType="string" Value="LOWER" />
</InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="email" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • email: SomeOne@contoso.com.
  • Входные параметры:
    • toCase: LOWER.
  • Выходные утверждения:
    • email: someone@contoso.com.

CompareClaims

Определяет, равно ли одно строковое утверждение другому. Результатом является новое логическое утверждение со значением true или false. Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaim inputClaim1 строка Тип первого утверждения, которое необходимо сравнить.
InputClaim inputClaim2 строка Тип второго утверждения, которое необходимо сравнить.
InputParameter оператор строка Возможные значения: EQUAL или NOT EQUAL.
InputParameter ignoreCase строка Указывает, следует ли в этом сравнении игнорировать регистр сравниваемых строк.
outputClaim outputClaim boolean Утверждение, которое создается после вызова этого преобразования утверждений.

Пример CompareClaims

Используйте это преобразование, чтобы проверить, равно ли одно утверждение другому. Следующее преобразование утверждений проверяет, равно ли значение утверждения email утверждению Verified.Email.

<ClaimsTransformation Id="CheckEmail" TransformationMethod="CompareClaims">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="Email" TransformationClaimType="inputClaim1" />
    <InputClaim ClaimTypeReferenceId="Verified.Email" TransformationClaimType="inputClaim2" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="operator" DataType="string" Value="NOT EQUAL" />
    <InputParameter Id="ignoreCase" DataType="string" Value="true" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="SameEmailAddress" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • inputClaim1: someone@contoso.com.
    • inputClaim2: someone@outlook.com.
  • Входные параметры:
    • operator: NOT EQUAL
    • ignoreCase: true.
  • Выходные утверждения:
    • outputClaim: true.

CompareClaimToValue

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

Элемент TransformationClaimType Тип данных Примечания.
InputClaim inputClaim1 строка Тип утверждения, которое необходимо сравнить.
InputParameter оператор строка Возможные значения: EQUAL или NOT EQUAL.
InputParameter compareTo строка Сравнение строк, одно из значений, то есть строка, с которой должны сравниваться входные значения утверждений: Ordinal, OrdinalIgnoreCase.
InputParameter ignoreCase строка Указывает, следует ли в этом сравнении игнорировать регистр сравниваемых строк.
outputClaim outputClaim boolean Утверждение, которое создается после вызова этого преобразования утверждений.

Пример CompareClaimToValue

С помощью этого преобразования можно проверить, равно ли утверждение указанному значению. Например, следующее преобразование утверждений проверяет, равно ли значение утверждения termsOfUseConsentVersion значению V2.

<ClaimsTransformation Id="IsTermsOfUseConsentRequiredForVersion" TransformationMethod="CompareClaimToValue">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="termsOfUseConsentVersion" TransformationClaimType="inputClaim1" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="compareTo" DataType="string" Value="V2" />
    <InputParameter Id="operator" DataType="string" Value="NOT EQUAL" />
    <InputParameter Id="ignoreCase" DataType="string" Value="true" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="termsOfUseConsentRequired" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • inputClaim1: v1.
  • Входные параметры:
    • compareTo: V2
    • operator: NOT EQUAL
    • ignoreCase: true.
  • Выходные утверждения:
    • outputClaim: true.

CopyClaimIfPredicateMatch

Копирует значение одного утверждения в другое, если значение входного утверждения совпадает с выходным предикатом исходящего утверждения. Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaim InputClaim строка Тип утверждения, который необходимо скопировать.
outputClaim outputClaim строка Тип утверждения, который создается после вызова этого преобразования утверждений. Значение входного утверждения проверяется по предикату этого утверждения.

Пример CopyClaimIfPredicateMatch

Следующий пример пытается скопировать значение утверждения signInName в утверждение phoneNumber. В этом примере значение не будет скопировано. Утверждение signInName отличается от ожидаемого формата (номера телефона). Полный пример см. в разделе Политика начального пакета для входа в систему по адресу электронной почты или номеру телефона.

<ClaimsTransformation Id="SetPhoneNumberIfPredicateMatch" TransformationMethod="CopyClaimIfPredicateMatch">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="signInName" TransformationClaimType="inputClaim" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="phoneNumber" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • inputClaim: bob@contoso.com.
  • Выходные утверждения:
    • outputClaim: выходное утверждение не будет изменено из исходного значения.

Пример CopyClaimIfPredicateMatch, который соответствует предикату

В этом примере преобразование утверждения скопирует значение. Утверждение signInName имеет правильный формат (номер телефона).

  • Входные утверждения:
    • inputClaim: +11234567890
  • Выходные утверждения:
    • outputClaim: +11234567890

CreateOtpSecret

Создает строковое утверждение TOTP. Выходные данные этого преобразования утверждений — секрет TOTP, который позже сохраняется в учетной записи пользователя Azure AD B2C и используется совместно с приложением Microsoft Authenticator. Приложение проверки подлинности использует этот ключ для создания кода TOTP, который пользователю потребуется для выполнения многофакторной проверки подлинности. Ваша политика использует этот ключ для проверки кода TOTP, предоставленного пользователем.

Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
outputClaim outputClaim строка Утверждение, которое создается после вызова этого преобразования утверждений, с созданным значением кода TOTP.

Пример CreateOtpSecret

Следующее преобразование утверждений создает секрет для многофакторной проверки подлинности TOTP.

<ClaimsTransformation Id="CreateSecret" TransformationMethod="CreateOtpSecret">
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="secretKey" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Выходные утверждения:
    • outputClaim: hmlcmd4ph6fph64c.

CreateRandomString

Создает случайную строку с помощью генератора случайных чисел. Если тип генератора случайных чисел — integer, при необходимости можно указать параметр начального значения и максимальное число. Необязательный параметр формата строки позволяет форматировать выходные данные, а необязательный параметр Base64 указывает, соответствуют ли выходные данные randomGeneratorType [идентификатор GUID, целое число] outputClaim (строка) в кодировке Base64.

Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputParameter randomGeneratorType строка Указывает случайное значение, которое необходимо создать: GUID (глобальный уникальный идентификатор) или INTEGER (число).
InputParameter stringFormat строка [Необязательно.] Формат случайного значения.
InputParameter base64 boolean [Необязательно.] Преобразование случайного значения в Base64. Если применяется формат строки, значение после формата строки кодируется в Base64.
InputParameter maximumNumber INT [Необязательно.] Только для типа randomGeneratorType INTEGER. Укажите максимальное число.
InputParameter seed INT [Необязательно.] Только для типа randomGeneratorType INTEGER. Укажите начальное значение для случайного значения. Примечание. Такое же начальное значение обеспечивает такую же последовательность случайных чисел.
outputClaim outputClaim строка Утверждение, которое будет создано после вызова этого преобразования утверждений. Случайное значение.

Пример CreateRandomString

В следующем примере создается глобальный уникальный идентификатор. С помощью этого преобразования утверждений создается случайное имя участника-пользователя.

<ClaimsTransformation Id="CreateRandomUPNUserName" TransformationMethod="CreateRandomString">
  <InputParameters>
    <InputParameter Id="randomGeneratorType" DataType="string" Value="GUID" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="upnUserName" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные параметры:
    • randomGeneratorType: глобальный уникальный идентификатор.
  • Выходные утверждения:
    • outputClaim: bc8bedd2-aaa3-411e-bdee-2f1810b73dfc.

Пример CreateRandomString, который создает числовое значение

В следующем примере создается случайное целое число от 0 до 1000. Значение форматируется в формат OTP_{случайное значение}.

<ClaimsTransformation Id="SetRandomNumber" TransformationMethod="CreateRandomString">
  <InputParameters>
    <InputParameter Id="randomGeneratorType" DataType="string" Value="INTEGER" />
    <InputParameter Id="maximumNumber" DataType="int" Value="1000" />
    <InputParameter Id="stringFormat" DataType="string" Value="OTP_{0}" />
    <InputParameter Id="base64" DataType="boolean" Value="false" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="randomNumber" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные параметры:
    • randomGeneratorType: INTEGER.
    • maximumNumber: 1000.
    • stringFormat: OTP_{0}.
    • Base64: false.
  • Выходные утверждения:
    • outputClaim: OTP_853.

CreateStringClaim

Создает строковое утверждение на основе предоставленного входного параметра в преобразовании. Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputParameter значение строка Строка, которую необходимо задать. Этот входной параметр поддерживает выражения преобразования строковых утверждений.
outputClaim createdClaim строка Утверждение, которое создается после вызова этого преобразования утверждений, со значением, указанным во входном параметре.

Пример CreateStringClaim

Следующее преобразование утверждений создает строковое значение с условиями предоставления услуг.

<ClaimsTransformation Id="CreateTermsOfService" TransformationMethod="CreateStringClaim">
  <InputParameters>
    <InputParameter Id="value" DataType="string" Value="Contoso terms of service..." />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="TOS" TransformationClaimType="createdClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входной параметр:
    • value: условия предоставления услуг компании Contoso...
  • Выходные утверждения:
    • createdClaim: утверждение TOS содержит значение "Условия предоставления услуг компании Contoso...".

FormatLocalizedString

Форматирование нескольких утверждений в соответствии с предоставленной локализованной строкой формата. Это преобразование использует метод C# String.Format. Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaims строка Коллекция входных утверждений, которые действуют как параметры в строковом формате {0}, {1}, {2}.
InputParameter stringFormatId строка StringId локализованной строки.
outputClaim outputClaim строка Утверждение, которое создается после вызова этого преобразования утверждений.

Примечание.

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

Чтобы использовать преобразование утверждений FormatLocalizedString, выполните следующие действия.

  1. Определите строку локализации и свяжите ее с самоподтвержденным техническим профилем.
  2. Для ElementType элемента LocalizedString необходимо задать значение FormatLocalizedStringTransformationClaimType.
  3. StringId — это уникальный определяемый вами идентификатор, который вы используете позже в преобразовании утвержденийstringFormatId.
  4. В преобразовании утверждений укажите список утверждений, которые должны быть заданы в локализованной строке. Затем присвойте значение stringFormatId свойству StringId из локализованного строкового элемента.
  5. В самоподтвержденном техническом профиле или элементе управления отображением преобразования входных или выходных утверждений укажите ссылку на преобразование утверждений.

Пример FormatLocalizedString

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

<Localization Enabled="true">
  <SupportedLanguages DefaultLanguage="en" MergeBehavior="Append">
    <SupportedLanguage>en</SupportedLanguage>
    <SupportedLanguage>es</SupportedLanguage>
   </SupportedLanguages>

  <LocalizedResources Id="api.localaccountsignup.en">
    <LocalizedStrings>
      <LocalizedString ElementType="FormatLocalizedStringTransformationClaimType" StringId="ResponseMessge_EmailExists">The email '{0}' is already an account in this organization. Click Next to sign in with that account.</LocalizedString>
      </LocalizedStrings>
    </LocalizedResources>
  <LocalizedResources Id="api.localaccountsignup.es">
    <LocalizedStrings>
      <LocalizedString ElementType="FormatLocalizedStringTransformationClaimType" StringId="ResponseMessge_EmailExists">Este correo electrónico "{0}" ya es una cuenta de esta organización. Haga clic en Siguiente para iniciar sesión con esa cuenta.</LocalizedString>
    </LocalizedStrings>
  </LocalizedResources>
</Localization>

Преобразование утверждений создает ответное сообщение на основе локализованной строки. Сообщение содержит адрес электронной почты пользователя, встроенный в локализованную строку ResponseMessge_EmailExists.

<ClaimsTransformation Id="SetResponseMessageForEmailAlreadyExists" TransformationMethod="FormatLocalizedString">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="email" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="stringFormatId" DataType="string" Value="ResponseMessge_EmailExists" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="responseMsg" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • inputClaim: sarah@contoso.com.
  • Входные параметры:
    • stringFormat: ResponseMessge_EmailExists
  • Выходные утверждения:
    • outputClaim: адрес электронной почты sarah@contoso.com уже является учетной записью в этой организации. Нажмите кнопку "Далее", чтобы войти в систему с помощью этой учетной записи.

FormatStringClaim

Форматирует утверждения в соответствии с указанной строкой формата. Это преобразование использует метод C# String.Format. Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaim InputClaim строка Утверждение, которое выступает в качестве параметра {0} формата строки.
InputParameter stringFormat строка Формат строки, включая параметр {0}. Этот входной параметр поддерживает выражения преобразования строковых утверждений.
outputClaim outputClaim строка Утверждение, которое создается после вызова этого преобразования утверждений.

Примечание.

Максимальный допустимый размер строкового формата — 4000.

Пример FormatStringClaim

Используйте это преобразование утверждений для форматирования любой строки с одним параметром {0}. В следующем примере создается userPrincipalName. Технические профили всех поставщиков удостоверений в социальных сетях, такие как Facebook-OAUTH, вызывают CreateUserPrincipalName для создания userPrincipalName.

<ClaimsTransformation Id="CreateUserPrincipalName" TransformationMethod="FormatStringClaim">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="upnUserName" TransformationClaimType="inputClaim" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="stringFormat" DataType="string" Value="cpim_{0}@{RelyingPartyTenantId}" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="userPrincipalName" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • inputClaim: 5164db16-3eee-4629-bfda-dcc3326790e9.
  • Входные параметры:
    • stringFormat: cpim_{0}@{RelyingPartyTenantId}
  • Выходные утверждения:
    • outputClaim: cpim_5164db16-3eee-4629-bfda-dcc3326790e9@b2cdemo.onmicrosoft.com.

FormatStringMultipleClaims

Форматирует два утверждения в соответствии с указанным форматом строки. Это преобразование использует метод C# String.Format. Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaim inputClaim1 строка Утверждение, которое выступает в качестве параметра {0} формата строки.
InputClaim inputClaim2 строка Утверждение, которое выступает в качестве параметра {1} формата строки.
InputParameter stringFormat строка Формат строки, включая параметры {0} и {1}. Этот входной параметр поддерживает выражения преобразования строковых утверждений.
outputClaim outputClaim строка Утверждение, которое создается после вызова этого преобразования утверждений.

Примечание.

Максимальный допустимый размер строкового формата — 4000.

Пример FormatStringMultipleClaims

Используйте это преобразование утверждений для форматирования любой строки с двумя параметрами: {0} и {1}. В следующем примере создается displayName с указанным форматом:

<ClaimsTransformation Id="CreateDisplayNameFromFirstNameAndLastName" TransformationMethod="FormatStringMultipleClaims">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="givenName" TransformationClaimType="inputClaim1" />
    <InputClaim ClaimTypeReferenceId="surName" TransformationClaimType="inputClaim2" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="stringFormat" DataType="string" Value="{0} {1}" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="displayName" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • inputClaim1: Joe.
    • inputClaim2: Fernando.
  • Входные параметры:
    • stringFormat: {0}{1}.
  • Выходные утверждения:
    • outputClaim: Joe Fernando.

GetLocalizedStringsTransformation

Копирует локализованные строки в утверждения. Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
outputClaim Имя локализованной строки строка Список типов утверждений, которые создаются после вызова этого преобразования утверждений.

Чтобы использовать утверждения GetLocalizedStringsTransformation, выполните следующие действия.

  1. Определите строку локализации для вашего определения содержимого, например api.selfasserted.

  2. Для ElementType элемента LocalizedString необходимо задать значение GetLocalizedStringsTransformationClaimType.

  3. StringId — это уникальный определяемый вами идентификатор, который вы используете позже в преобразовании утверждений.

  4. В преобразовании утверждений укажите список утверждений, которые должны быть заданы в локализованной строке. ClaimTypeReferenceId — это ссылка на утверждение, уже определенная в разделе ClaimsSchema файла политики. TransformationClaimType — это имя локализованной строки, определенное в StringId элемента LocalizedString.

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

  6. Свяжите технический профиль с определением содержимого, например api.selfasserted. В следующем примере показано, как связать технический профиль с api.selfasserted определением содержимого.

    <Metadata>
      <Item Key="ContentDefinitionReferenceId">api.selfasserted</Item>
    </Metadata>
    

На следующей схеме показано, как настроить преобразование утверждений с помощью элементов локализации:

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

Пример GetLocalizedStringsTransformation

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

Определите локализованные строки для английского языка (по умолчанию) и испанского.

<Localization Enabled="true">
  <SupportedLanguages DefaultLanguage="en" MergeBehavior="Append">
    <SupportedLanguage>en</SupportedLanguage>
    <SupportedLanguage>es</SupportedLanguage>
   </SupportedLanguages>

  <LocalizedResources Id="api.localaccountsignup.en">
    <LocalizedStrings>
      <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_subject">Contoso account email verification code</LocalizedString>
      <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_message">Thanks for verifying your account!</LocalizedString>
      <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_code">Your code is</LocalizedString>
      <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_signature">Sincerely</LocalizedString>
     </LocalizedStrings>
   </LocalizedResources>
   <LocalizedResources Id="api.localaccountsignup.es">
     <LocalizedStrings>
      <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_subject">Código de verificación del correo electrónico de la cuenta de Contoso</LocalizedString>
      <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_message">Gracias por comprobar la cuenta de </LocalizedString>
      <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_code">Su código es</LocalizedString>
      <LocalizedString ElementType="GetLocalizedStringsTransformationClaimType" StringId="email_signature">Atentamente</LocalizedString>
    </LocalizedStrings>
  </LocalizedResources>
</Localization>

Преобразование утверждений задает значение типа утверждения subject со значением StringId email_subject.

<ClaimsTransformation Id="GetLocalizedStringsForEmail" TransformationMethod="GetLocalizedStringsTransformation">
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="subject" TransformationClaimType="email_subject" />
    <OutputClaim ClaimTypeReferenceId="message" TransformationClaimType="email_message" />
    <OutputClaim ClaimTypeReferenceId="codeIntro" TransformationClaimType="email_code" />
    <OutputClaim ClaimTypeReferenceId="signature" TransformationClaimType="email_signature" />
   </OutputClaims>
</ClaimsTransformation>
  • Выходные утверждения:
    • тема: код проверки электронной почты учетной записи Contoso
    • сообщение: спасибо за проверку учетной записи!
    • codeIntro: код — это ваш код
    • подпись: Искренне

GetMappedValueFromLocalizedCollection

Сопоставляет элемент из коллекции Ограничения входного утверждения. Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaim mapFromClaim строка Утверждение, содержащее текст, поиск которого будет выполняться в утверждениях restrictionValueClaim с коллекцией Restriction.
outputClaim restrictionValueClaim строка Утверждение, содержащее коллекцию Restriction. После вызова преобразования утверждений значение этого утверждения будет содержать значение выбранного элемента.

Пример GetMappedValueFromLocalizedCollection

В следующем примере выполняется поиск описания сообщения об ошибке на основе ключа ошибки. Утверждение ResponseMsg содержит коллекцию сообщений об ошибках для представления пользователю или отправки проверяющей стороне.

<ClaimType Id="responseMsg">
  <DisplayName>Error message: </DisplayName>
  <DataType>string</DataType>
  <UserInputType>Paragraph</UserInputType>
  <Restriction>
    <Enumeration Text="B2C_V1_90001" Value="You cannot sign in because you are a minor" />
    <Enumeration Text="B2C_V1_90002" Value="This action can only be performed by gold members" />
    <Enumeration Text="B2C_V1_90003" Value="You have not been enabled for this operation" />
  </Restriction>
</ClaimType>

Преобразование утверждений ищет текст элемента и возвращает его значение. Если ограничение локализовано с помощью <LocalizedCollection>, преобразование утверждений возвращает локализованное значение.

<ClaimsTransformation Id="GetResponseMsgMappedToResponseCode" TransformationMethod="GetMappedValueFromLocalizedCollection">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="responseCode" TransformationClaimType="mapFromClaim" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="responseMsg" TransformationClaimType="restrictionValueClaim" />        
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • mapFromClaim: B2C_V1_90001.
  • Выходные утверждения:
    • restrictionValueClaim: "Вы не можете войти, так как являетесь несовершеннолетним".

LookupValue

Ищет значение утверждения в списке значений на основе значения другого утверждения. Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaim inputParameterId строка Утверждение, содержащее значение подстановки.
InputParameter строка Коллекция inputParameters.
InputParameter errorOnFailedLookup boolean Контролирует, будет ли возвращена ошибка, если значение подстановки не найдено.
outputClaim outputClaim строка Утверждение, которое будет создано после вызова этого преобразования утверждений. Значение соответствующего Id.

Пример LookupValue

В следующем примере выполняется поиск доменного имени в одной из коллекций inputParameters. Преобразование утверждений ищет доменное имя в идентификаторе и возвращает его значение (идентификатор приложения).

 <ClaimsTransformation Id="DomainToClientId" TransformationMethod="LookupValue">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="domainName" TransformationClaimType="inputParameterId" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="contoso.com" DataType="string" Value="13c15f79-8fb1-4e29-a6c9-be0d36ff19f1" />
    <InputParameter Id="microsoft.com" DataType="string" Value="0213308f-17cb-4398-b97e-01da7bd4804e" />
    <InputParameter Id="test.com" DataType="string" Value="c7026f88-4299-4cdb-965d-3f166464b8a9" />
    <InputParameter Id="errorOnFailedLookup" DataType="boolean" Value="false" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="domainAppId" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • inputParameterId: test.com.
  • Входные параметры:
    • contoso.com: 13c15f79-8fb1-4e29-a6c9-be0d36ff19f1.
    • microsoft.com: 0213308f-17cb-4398-b97e-01da7bd4804e.
    • test.com: c7026f88-4299-4cdb-965d-3f166464b8a9.
    • errorOnFailedLookup: false.
  • Выходные утверждения:
    • outputClaim: c7026f88-4299-4cdb-965d-3f166464b8a9

Пример LookupValue с ошибкой

Если входной параметр errorOnFailedLookup имеет значение true, преобразование утверждений LookupValue всегда выполняется из технического профиля проверки, вызываемого с помощью самоподтвержденного технического профиля или DisplayControl. Метаданные LookupNotFound самоподтвержденного технического профиля позволяют управлять сообщением об ошибке, представленным пользователю.

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

В следующем примере выполняется поиск доменного имени в одной из коллекций inputParameters. Преобразование утверждений ищет доменное имя в идентификаторе и возвращает его значение (идентификатор приложения) или выдает сообщение об ошибке.

 <ClaimsTransformation Id="DomainToClientId" TransformationMethod="LookupValue">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="domainName" TransformationClaimType="inputParameterId" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="contoso.com" DataType="string" Value="13c15f79-8fb1-4e29-a6c9-be0d36ff19f1" />
    <InputParameter Id="microsoft.com" DataType="string" Value="0213308f-17cb-4398-b97e-01da7bd4804e" />
    <InputParameter Id="test.com" DataType="string" Value="c7026f88-4299-4cdb-965d-3f166464b8a9" />
    <InputParameter Id="errorOnFailedLookup" DataType="boolean" Value="true" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="domainAppId" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • inputParameterId: live.com
  • Входные параметры:
    • contoso.com: 13c15f79-8fb1-4e29-a6c9-be0d36ff19f1.
    • microsoft.com: 0213308f-17cb-4398-b97e-01da7bd4804e.
    • test.com: c7026f88-4299-4cdb-965d-3f166464b8a9.
    • errorOnFailedLookup: true
  • Ошибка:
    • Не найдено совпадение для входного значения утверждения в списке идентификаторов входных параметров и errorOnFailedLookup имеет значение true.

NullClaim

Удаляет значение указанного утверждения. Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
outputClaim claim_to_null строка Для утверждения задано значение NULL.

Пример NullClaim

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

<ClaimsTransformation Id="SetTOSToNull" TransformationMethod="NullClaim">
  <OutputClaims>
  <OutputClaim ClaimTypeReferenceId="TermsOfService" TransformationClaimType="claim_to_null" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • outputClaim: "Добро пожаловать в приложение Contoso". Если вы по-прежнему просматриваете и используете этот веб-сайт, вы соглашаетесь соблюдать и выполнять следующие положения и условия...
  • Выходные утверждения:
    • outputClaim: NULL.

ParseDomain

Получает доменную часть адреса электронной почты. Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaim emailAddress строка Утверждение, которое содержит адрес электронной почты.
outputClaim domain строка Утверждение, которое создается после вызова этого преобразования утверждений (домен).

Пример ParseDomain

Это преобразование утверждений используется для анализа доменного имени после символа @ пользователя. В следующих преобразованиях утверждений показано, как проанализировать доменное имя из утверждения email.

<ClaimsTransformation Id="SetDomainName" TransformationMethod="ParseDomain">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="emailAddress" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="domainName" TransformationClaimType="domain" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • EmailAddress: joe@outlook.com.
  • Выходные утверждения:
    • domain: outlook.com.

SetClaimIfBooleansMatch

Проверяет, имеет ли логическое утверждение значение true или false. Если первое, задает выходные утверждения со значением, указанном во входном параметре outputClaimIfMatched. Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaim claimToMatch строка Тип проверяемого утверждения. При значении NULL возникает исключение.
InputParameter matchTo строка Значение для сравнения с входным утверждением claimToMatch. Возможные значения: true или false.
InputParameter outputClaimIfMatched строка Значение, которое будет задано, если входное утверждение равно входном параметру matchTo.
outputClaim outputClaim строка Если входное утверждение claimToMatch равно входному параметру matchTo, это входное утверждение содержит значение входного параметр outputClaimIfMatched.

Пример SetClaimIfBooleansMatch

Например, следующее преобразование утверждений проверяет, равно ли значение утверждения hasPromotionCode значению true. Если да, возвращает значение до Код повышения уровня не найден.

<ClaimsTransformation Id="GeneratePromotionCodeError" TransformationMethod="SetClaimIfBooleansMatch">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="hasPromotionCode" TransformationClaimType="claimToMatch" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="matchTo" DataType="string" Value="true" />
    <InputParameter Id="outputClaimIfMatched" DataType="string" Value="Promotion code not found." />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="promotionCode" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • claimToMatch: true
  • Входные параметры:
    • matchTo: true
    • outputClaimIfMatched: "Код повышения уровня не найден."
  • Выходные утверждения:
    • outputClaim: "Код повышения уровня не найден."

SetClaimsIfRegexMatch

Проверяет, равны ли строка утверждения claimToMatch и входной параметр matchTo, и задает для исходящих утверждений значение, указанное во входном параметре outputClaimIfMatched, а также задает для исходящего утверждения результата сравнения значение true или false в зависимости от результата сравнения.

Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaim claimToMatch строка Тип утверждения, которое необходимо сравнить.
InputParameter matchTo строка Регулярное выражение для сравнения.
InputParameter outputClaimIfMatched строка Значение, которое необходимо задать, если строки равны.
InputParameter extractGroups boolean [Необязательно] Указывает, должно ли соответствие регулярного выражения извлекать значения групп. Возможные значения: true или false (по умолчанию).
outputClaim outputClaim строка Если регулярное выражение совпадает, это исходящее утверждение содержит значение входного параметра outputClaimIfMatched. Или NULL, если совпадений нет.
outputClaim regexCompareResultClaim boolean Регулярное выражение соответствует типу исходящего утверждения результата, для которого необходимо задать значение true или false на основе результата сравнения.
outputClaim Имя утверждения строка Если входной параметр extractGroups имеет значение true, список типов утверждений, которые создаются после вызова этого преобразования утверждений. Имя утверждения должно соответствовать имени группы регулярного выражения.

Пример SetClaimsIfRegexMatch

Проверяет, является ли указанный номер телефона действительным, на основе шаблона регулярного выражения номера телефона.

<ClaimsTransformation Id="SetIsPhoneRegex" TransformationMethod="SetClaimsIfRegexMatch">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="phone" TransformationClaimType="claimToMatch" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="matchTo" DataType="string" Value="^[0-9]{4,16}$" />
    <InputParameter Id="outputClaimIfMatched" DataType="string" Value="iPhone" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="validationResult" TransformationClaimType="outputClaim" />
    <OutputClaim ClaimTypeReferenceId="isPhoneBoolean" TransformationClaimType="regexCompareResultClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • claimToMatch: "64854114520"
  • Входные параметры:
    • matchTo: "^[0-9]{4,16}$"
    • outputClaimIfMatched: "Phone"
  • Выходные утверждения:
    • outputClaim: "iPhone"
    • regexCompareResultClaim: true

Пример SetClaimsIfRegexMatch с группами извлечения

Проверяет, является ли указанный адрес электронной почты действительным, и возвращает псевдоним электронной почты. Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

<ClaimsTransformation Id="GetAliasFromEmail" TransformationMethod="SetClaimsIfRegexMatch">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="email" TransformationClaimType="claimToMatch" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="matchTo" DataType="string" Value="(?&lt;mailAlias&gt;.*)@(.*)$" />
    <InputParameter Id="outputClaimIfMatched" DataType="string" Value="isEmail" />
    <InputParameter Id="extractGroups" DataType="boolean" Value="true" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="validationResult" TransformationClaimType="outputClaim" />
    <OutputClaim ClaimTypeReferenceId="isEmailString" TransformationClaimType="regexCompareResultClaim" />
    <OutputClaim ClaimTypeReferenceId="mailAlias" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • claimToMatch: "emily@contoso.com"
  • Входные параметры:
    • matchTo: (?&lt;mailAlias&gt;.*)@(.*)$
    • outputClaimIfMatched: "isEmail"
    • extractGroups: true
  • Выходные утверждения:
    • outputClaim: "isEmail"
    • regexCompareResultClaim: true
    • mailAlias: emily

SetClaimsIfStringsAreEqual

Проверяет, равны ли строка утверждения и входной параметр matchTo, и задает для исходящих утверждений значение, указанное во входных параметрах stringMatchMsg и stringMatchMsgCode, а также задает для исходящего утверждения результата сравнения значение true или false в зависимости от результата сравнения.

Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaim InputClaim строка Тип утверждения, которое необходимо сравнить.
InputParameter matchTo строка Строка для сравнения с inputClaim.
InputParameter stringComparison строка Возможные значения: Ordinal или OrdinalIgnoreCase.
InputParameter stringMatchMsg строка Первое значение, которое необходимо задать, если строки равны.
InputParameter stringMatchMsgCode строка Второе значение, которое необходимо задать, если строки равны.
outputClaim outputClaim1 строка Если строки равны, это исходящее утверждение содержит значение входного параметра stringMatchMsg.
outputClaim outputClaim2 строка Если строки равны, это исходящее утверждение содержит значение входного параметра stringMatchMsgCode.
outputClaim stringCompareResultClaim boolean Тип исходящего утверждения результата сравнения, для которого необходимо задать значение true или false на основе результата сравнения.

Пример SetClaimsIfStringsAreEqual

С помощью этого преобразования можно проверить, равно ли утверждение указанному значению. Например, следующее преобразование утверждений проверяет, равно ли значение утверждения termsOfUseConsentVersion значению v1. Если да, измените значение на v2.

<ClaimsTransformation Id="CheckTheTOS" TransformationMethod="SetClaimsIfStringsAreEqual">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="termsOfUseConsentVersion" TransformationClaimType="inputClaim" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="matchTo" DataType="string" Value="v1" />
    <InputParameter Id="stringComparison" DataType="string" Value="ordinalIgnoreCase" />
    <InputParameter Id="stringMatchMsgCode" DataType="string" Value="B2C_V1_90005" />
    <InputParameter Id="stringMatchMsg" DataType="string" Value="The TOS is upgraded to v2" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="termsOfUseConsentVersion" TransformationClaimType="outputClaim1" />
    <OutputClaim ClaimTypeReferenceId="termsOfUseConsentVersionUpgradeCode" TransformationClaimType="outputClaim2" />
    <OutputClaim ClaimTypeReferenceId="termsOfUseConsentVersionUpgradeResult" TransformationClaimType="stringCompareResultClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • inputClaim: v1.
  • Входные параметры:
    • matchTo: V1.
    • stringComparison: ordinalIgnoreCase.
    • stringMatchMsgCode: B2C_V1_90005.
    • stringMatchMsg: обновление TOS до версии 2.
  • Выходные утверждения:
    • outputClaim1: B2C_V1_90005.
    • outputClaim2: "TOS обновлено до версии 2".
    • stringCompareResultClaim: true.

SetClaimsIfStringsMatch

Проверяет, равны ли строка утверждения и входной параметр matchTo, и задает для исходящих утверждений значение, указанное во входном параметре outputClaimIfMatched, а также задает для исходящего утверждения результата сравнения значение true или false в зависимости от результата сравнения.

Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaim claimToMatch строка Тип утверждения, которое необходимо сравнить.
InputParameter matchTo строка Строка для сравнения с inputClaim.
InputParameter stringComparison строка Возможные значения: Ordinal или OrdinalIgnoreCase.
InputParameter outputClaimIfMatched строка Значение, которое необходимо задать, если строки равны.
outputClaim outputClaim строка Если строки равны, это исходящее утверждение содержит значение входного параметра outputClaimIfMatched. Или значение NULL, если строки не совпадают.
outputClaim stringCompareResultClaim boolean Тип исходящего утверждения результата сравнения, для которого необходимо задать значение true или false на основе результата сравнения.

Пример SetClaimsIfStringsMatch

Например, следующее преобразование утверждений проверяет, равно ли значение утверждения ageGroup значению Minor. Если да, возвращает значение для B2C_V1_90001.

<ClaimsTransformation Id="SetIsMinor" TransformationMethod="SetClaimsIfStringsMatch">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="ageGroup" TransformationClaimType="claimToMatch" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="matchTo" DataType="string" Value="Minor" />
    <InputParameter Id="stringComparison" DataType="string" Value="ordinalIgnoreCase" />
    <InputParameter Id="outputClaimIfMatched" DataType="string" Value="B2C_V1_90001" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="isMinor" TransformationClaimType="outputClaim" />
    <OutputClaim ClaimTypeReferenceId="isMinorResponseCode" TransformationClaimType="stringCompareResultClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • claimToMatch: Minor.
  • Входные параметры:
    • matchTo: Minor.
    • stringComparison: ordinalIgnoreCase.
    • outputClaimIfMatched: B2C_V1_90001
  • Выходные утверждения:
    • isMinorResponseCode: true
    • isMinor: B2C_V1_90001

StringContains;

Определяет, находится ли указанная подстрока во входном утверждении. Результатом является новое логическое утверждение со значением true или false. Значение true, если параметр значения встречается в этой строке; в противном случае — значение false.

Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaim InputClaim строка Тип утверждения, которое необходимо найти.
InputParameter содержит строка Значение, которое нужно найти.
InputParameter ignoreCase строка Указывает, следует ли в этом сравнении игнорировать регистр сравниваемых строк.
outputClaim outputClaim строка Утверждение, которое создается после вызова этого преобразования утверждений. Логический индикатор, если подстрока встречается во входном утверждении.

Пример StringContains

Используйте это преобразование, чтобы проверить, содержит ли тип строкового утверждения подстроку. В следующем примере проверяется, содержит ли тип строкового утверждения roles значение admin.

<ClaimsTransformation Id="CheckIsAdmin" TransformationMethod="StringContains">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="roles" TransformationClaimType="inputClaim"/>
  </InputClaims>
  <InputParameters>
    <InputParameter  Id="contains" DataType="string" Value="admin"/>
    <InputParameter  Id="ignoreCase" DataType="string" Value="true"/>
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="isAdmin" TransformationClaimType="outputClaim"/>
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • inputClaim: "Admin, Утверждающий, Редактор"
  • Входные параметры:
    • contains: "admin,"
    • ignoreCase: true.
  • Выходные утверждения:
    • outputClaim: true.

StringSubstring

Извлекает части типа строкового утверждения, начиная с символа в указанной позиции, и возвращает указанное число символов. Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaim InputClaim строка Тип утверждения, который содержит строку.
InputParameter startIndex INT Отсчитываемая от нуля позиция первого знака подстроки в данном экземпляре.
InputParameter length INT Число символов в подстроке.
outputClaim outputClaim строка Строка, эквивалентная подстроке с длиной, которая начинается с startIndex в данном экземпляре, или Empty, если значение startIndex равно длине данного экземпляра, а значение длины равно нулю.

Пример StringSubstring

Например, получите префикс страны/региона для номера телефона.

<ClaimsTransformation Id="GetPhonePrefix" TransformationMethod="StringSubstring">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="phoneNumber" TransformationClaimType="inputClaim" />
  </InputClaims>
<InputParameters>
  <InputParameter Id="startIndex" DataType="int" Value="0" />
  <InputParameter Id="length" DataType="int" Value="2" />
</InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="phonePrefix" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • inputClaim: "+1644114520"
  • Входные параметры:
    • startIndex: 0
    • length: 2
  • Выходные утверждения:
    • outputClaim: "+1"

StringReplace

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

Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaim InputClaim строка Тип утверждения, который содержит строку.
InputParameter oldValue строка Строка, в которой выполняется поиск.
InputParameter newValue строка Строка для замены всех вхождений oldValue.
outputClaim outputClaim boolean Строка, эквивалентная текущей строке, но с тем отличием, что все вхождения oldValue заменены на newValue. Если oldValue не обнаружено в текущем экземпляре, метод возвращает текущий экземпляр без изменений.

Пример StringReplace

Например, нормализация номера телефона путем удаления символов -

<ClaimsTransformation Id="NormalizePhoneNumber" TransformationMethod="StringReplace">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="phoneNumber" TransformationClaimType="inputClaim" />
  </InputClaims>
<InputParameters>
  <InputParameter Id="oldValue" DataType="string" Value="-" />
  <InputParameter Id="newValue" DataType="string" Value="" />
</InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="phoneNumber" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • inputClaim: "+164-411-452-054"
  • Входные параметры:
    • oldValue: "-"
    • newValue: ""
  • Выходные утверждения:
    • outputClaim: "+164411452054"

StringJoin

Сцепляет элементы указанного типа утверждения коллекции строк, помещая заданный разделитель между каждым элементом или членом.

Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaim InputClaim stringCollection Коллекция, содержащая строки для сцепления.
InputParameter разделитель строка Строка, используемая в качестве разделителя, например запятая ,.
outputClaim outputClaim строка Строка, состоящая из элементов коллекции строк inputClaim, разделяемых входным параметром delimiter.

Пример StringJoin

В следующем примере коллекция строк для ролей пользователей преобразуется в строку с разделителем запятой. Этот метод можно использовать для хранения коллекции строк в учетной записи пользователя Azure AD B2C. Позже, при чтении учетной записи из каталога, используйте StringSplit для преобразования строки с разделителем запятой обратно в коллекцию строк.

<ClaimsTransformation Id="ConvertRolesStringCollectionToCommaDelimiterString" TransformationMethod="StringJoin">
  <InputClaims>
   <InputClaim ClaimTypeReferenceId="roles" TransformationClaimType="inputClaim" />
  </InputClaims>
  <InputParameters>
    <InputParameter DataType="string" Id="delimiter" Value="," />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="rolesCommaDelimiterConverted" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • inputClaim: [ "Admin", "Author", "Reader" ].
  • Входные параметры:
    • delimiter: ","
  • Выходные утверждения:
    • outputClaim: "Admin,Author,Reader".

StringSplit

Возвращает строковый массив, содержащий подстроки в этом экземпляре, разделенные элементами заданной строки. Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

Элемент TransformationClaimType Тип данных Примечания.
InputClaim InputClaim строка Тип строкового утверждения, который содержит подстроки для разбиения.
InputParameter разделитель строка Строка, используемая в качестве разделителя, например запятая ,.
outputClaim outputClaim stringCollection Коллекция строк, элементы которой содержат подстроки данной строки, разделенные входным параметром delimiter.

Примечание.

Все существующие элементы в stringCollection OutputClaim будут удалены.

Пример StringSplit

В следующем примере строка ролей пользователей с разделителями запятыми преобразуется в коллекцию строк.

<ClaimsTransformation Id="ConvertRolesToStringCollection" TransformationMethod="StringSplit">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="rolesCommaDelimiter" TransformationClaimType="inputClaim" />
  </InputClaims>
  <InputParameters>
  <InputParameter DataType="string" Id="delimiter" Value="," />
    </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="roles" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входные утверждения:
    • inputClaim: Admin,Author,Reader.
  • Входные параметры:
    • delimiter: ","
  • Выходные утверждения:
    • outputClaim: [ "Admin", "Author", "Reader" ].

Выражения преобразований строкового утверждения

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

Expression Описание: Пример
{TechnicalProfileId} Имя идентификатора технического профиля. Facebook-OAUTH
{RelyingPartyTenantId} Идентификатор клиента для политики проверяющей стороны. your-tenant.onmicrosoft.com
{TrustFrameworkTenantId} Идентификатор клиента инфраструктуры доверия. your-tenant.onmicrosoft.com

Следующие шаги