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

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

AssertDateTimeIsGreaterThan

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

Элемент TransformationClaimType Тип данных Примечания
InputClaim leftOperand строка Тип первого утверждения, который должен быть больше (позже) второго утверждения.
InputClaim rightOperand строка Тип второго утверждения, который должен быть меньше (раньше) первого утверждения.
InputParameter AssertIfEqualTo Логическое Указывает, должно ли это утверждение вызывать ошибку, если левый операнд равен правому. Возможные значения: true (по умолчанию) или false.
InputParameter AssertIfRightOperandIsNotPresent Логическое Указывает, выполняется ли это утверждение, если правый операнд отсутствует.
InputParameter TreatAsEqualIfWithinMillseconds INT Указывает количество миллисекунд между двумя датами и временем, после которого они считаются равными (например, чтобы учесть разницу в показаниях часов).

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

На схемах показано, как использовать преобразование утверждений AssertStringClaimsAreEqual.

Пример AssertDateTimeIsGreaterThan

В следующем примере сравнивается утверждение currentDateTime с утверждением approvedDateTime. Ошибка возникает в случае, когда currentDateTime больше (позже), чем approvedDateTime. Преобразование считает значения равными, если они отличаются не более, чем на 5 минут (30 000 миллисекунд). При равных значениях ошибка не возникнет, так как AssertIfEqualTo имеет значение false.

<ClaimsTransformation Id="AssertApprovedDateTimeLaterThanCurrentDateTime" TransformationMethod="AssertDateTimeIsGreaterThan">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="approvedDateTime" TransformationClaimType="leftOperand" />
    <InputClaim ClaimTypeReferenceId="currentDateTime" TransformationClaimType="rightOperand" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="AssertIfEqualTo" DataType="boolean" Value="false" />
    <InputParameter Id="AssertIfRightOperandIsNotPresent" DataType="boolean" Value="true" />
    <InputParameter Id="TreatAsEqualIfWithinMillseconds" DataType="int" Value="300000" />
  </InputParameters>
</ClaimsTransformation>

Примечание

В приведенном выше примере, если удалить входной параметр AssertIfEqualTo, а currentDateTime будет иметь значение approvedDateTime, будет выдана ошибка. По умолчанию AssertIfEqualTo имеет значение true.

  • Входящие утверждения:
    • leftOperand: 2022-01-01T15:00:00.
    • rightOperand: 2022-01-22T15:00:00.
  • Входные параметры:
    • AssertIfEqualTo: false.
    • AssertIfRightOperandIsNotPresent: true.
    • TreatAsEqualIfWithinMillseconds: 300000 (30 с).
  • Результат: возникла ошибка.

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

Следующий технический профиль проверки Example-AssertDates вызывает преобразование утверждений AssertApprovedDateTimeLaterThanCurrentDateTime.

<TechnicalProfile Id="Example-AssertDates">
  <DisplayName>Unit test</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.ClaimsTransformationProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="ComparisonResult" DefaultValue="false" />
  </OutputClaims>
  <OutputClaimsTransformations>
    <OutputClaimsTransformation ReferenceId="AssertDates" />
  </OutputClaimsTransformations>
  <UseTechnicalProfileForSessionManagement ReferenceId="SM-Noop" />
</TechnicalProfile>

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

<TechnicalProfile Id="SelfAsserted-AssertDateTimeIsGreaterThan">
  <DisplayName>User ID signup</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.SelfAssertedAttributeProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="ContentDefinitionReferenceId">api.selfasserted</Item>
    <Item Key="DateTimeGreaterThan">Custom error message if the provided right operand is greater than the right operand.</Item>
  </Metadata>
  ...
  <ValidationTechnicalProfiles>
    <ValidationTechnicalProfile ReferenceId="ClaimsTransformation-AssertDateTimeIsGreaterThan" />
  </ValidationTechnicalProfiles>
</TechnicalProfile>

ConvertDateTimeToDateClaim

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

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

Пример ConvertDateTimeToDateClaim

В следующем примере показано преобразование утверждения systemDateTime (тип данных dateTime ) в другое утверждение systemDate (тип данных date).

<ClaimsTransformation Id="ConvertToDate" TransformationMethod="ConvertDateTimeToDateClaim">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="systemDateTime" TransformationClaimType="inputClaim" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="systemDate" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Входящие утверждения:
    • inputClaim: 2022-01-03T11:34:22.0000000Z.
  • Исходящие утверждения:
    • outputClaim: 2022-01-03.

ConvertDateToDateTimeClaim

Преобразует тип утверждения Date в тип утверждения DateTime. Преобразование утверждений преобразует формат времени и добавляет 00:00:00 к дате. Ознакомьтесь с преобразованием этих утверждений в демонстрации в реальном времени.

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

Пример ConvertDateToDateTimeClaim

В следующем примере показано преобразование утверждения dateOfBirth (тип данных date) в другое утверждение dateOfBirthWithTime (тип данных dateTime).

  <ClaimsTransformation Id="ConvertToDateTime" TransformationMethod="ConvertDateToDateTimeClaim">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="dateOfBirth" TransformationClaimType="inputClaim" />
    </InputClaims>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="dateOfBirthWithTime" TransformationClaimType="outputClaim" />
    </OutputClaims>
  </ClaimsTransformation>
  • Входящие утверждения:
    • inputClaim: 2022-01-03.
  • Исходящие утверждения:
    • outputClaim: 2022-01-03T00:00:00.0000000Z.

DateTimeComparison

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

Элемент TransformationClaimType Тип данных Примечания
InputClaim firstDateTime dateTime Первая дата для определения того, является ли она более поздней, более ранней или равной ей. При значении NULL возникает исключение.
InputClaim secondDateTime dateTime Вторая сравниваемая дата. Значение NULL обрабатывается как текущее значение даты и времени.
InputParameter timeSpanInSeconds INT Интервал времени, который необходимо добавить к первой дате. Возможные значения: диапазон от отрицательного значения -2 147 483 648 до положительного значения 2 147 483 647.
InputParameter оператор строка Одно из следующих значений: same, later than или earlier than.
outputClaim result Логическое Утверждение, которое создается после вызова этого преобразования утверждений.

Пример DateTimeComparison

Используйте это преобразование утверждений, чтобы определить, является ли первая дата плюс параметр timeSpanInSeconds более поздней, более ранней или равной ей. В следующем примере показано, что первая дата (2022-01-01T00:00:00) плюс 90 дней является более поздней, чем вторая дата (2022-03-16T00:00:00).

<ClaimsTransformation Id="CompareLastTOSAcceptedWithCurrentDateTime" TransformationMethod="DateTimeComparison">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="extension_LastTOSAccepted" TransformationClaimType="secondDateTime" />
    <InputClaim ClaimTypeReferenceId="currentDateTime" TransformationClaimType="firstDateTime" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="operator" DataType="string" Value="later than" />
    <InputParameter Id="timeSpanInSeconds" DataType="int" Value="7776000" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="isLastTOSAcceptedGreaterThanNow" TransformationClaimType="result" />
  </OutputClaims>
</ClaimsTransformation>
  • Входящие утверждения:
    • firstDateTime: 2022-01-01T00:00:00.100000Z.
    • secondDateTime: 2022-03-16T00:00:00.100000Z.
  • Входные параметры:
    • operator: later than
    • timeSpanInSeconds: 7776000 (90 дней)
  • Исходящие утверждения:
    • result: true

Пример IsTermsOfUseConsentRequired

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

Item TransformationClaimType Тип данных Примечания
InputClaim Пример termsOfUseConsentDateTime dateTime Тип утверждения dateTime, который проверяет, является ли это значение более ранним или более поздним, чем значение входного параметра termsOfUseTextUpdateDateTime. Неопределенное значение возвращает результат true.
InputParameter Пример termsOfUseTextUpdateDateTime dateTime Тип утверждения dateTime, который проверяет, является ли это значение более ранним или более поздним, чем входное утверждение termsOfUseConsentDateTime. Часть даты, определяющая время, является необязательной.
outputClaim result Логическое Тип утверждения, который создается после вызова этого преобразования утверждений.

Используйте это преобразование утверждений, чтобы определить, является ли тип утверждения dateTime более ранним или большим, чем определенная дата. Например, проверьте, согласился ли пользователь с последней версией ваших условий использования или предоставления услуг. Чтобы проверить, когда пользователь в последний раз предоставлял согласие, сохраните время, когда пользователь в последний раз принял условия использования, в атрибуте расширения. Когда ваша формулировка условий использования изменится, обновите входной параметр termsOfUseTextUpdateDateTime, указав время изменения. Затем вызовите это преобразование утверждений, чтобы сравнить даты. Если преобразование утверждений возвращает true, это значит, что значение termsOfUseConsentDateTime предшествует значению termsOfUseTextUpdateDateTime, и вы можете попросить пользователя принять обновленные условия использования.

<ClaimsTransformation Id="IsTermsOfUseConsentRequired" TransformationMethod="IsTermsOfUseConsentRequired">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="extension_termsOfUseConsentDateTime" TransformationClaimType="termsOfUseConsentDateTime" />
  </InputClaims>
  <InputParameters>
    <InputParameter Id="termsOfUseTextUpdateDateTime" DataType="dateTime" Value="2021-11-15T00:00:00" />
  </InputParameters>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="termsOfUseConsentRequired" TransformationClaimType="result" />
  </OutputClaims>
</ClaimsTransformation>

Пример IsTermsOfUseConsentRequired

  • Входящие утверждения:
    • termsOfUseConsentDateTime: 2020-03-09T09:15:00.
  • Входные параметры:
    • termsOfUseTextUpdateDateTime: 2021-11-15.
  • Исходящие утверждения:
    • result: true

GetCurrentDateTime

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

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

Пример GetCurrentDateTime

В следующем примере показано, как получить текущие данные и время:

<ClaimsTransformation Id="GetSystemDateTime" TransformationMethod="GetCurrentDateTime">
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="systemDateTime" TransformationClaimType="currentDateTime" />
  </OutputClaims>
</ClaimsTransformation>
  • Исходящие утверждения:
    • currentDateTime: 2022-01-14T11:40:35.0000000Z.

Дальнейшие действия