Преобразования утверждений даты
В этой статье приведены примеры использования преобразований утверждений даты схемы 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 задаются сообщения об ошибках, которые технический профиль отображает пользователю. Сообщения об ошибках можно локализовать.
Пример 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.
Дальнейшие действия
- Дополнительные примеры преобразования утверждений можно найти в репозитории сообщества Azure AD B2C в GitHub.