日期声明转换
本文提供了在 Azure Active Directory B2C (Azure AD B2C) 中使用标识体验框架架构的日期声明转换的示例。 有关详细信息,请参阅声明转换。
AssertDateTimeIsGreaterThan
断言第一个日期晚于第二个日期。 确定 rightOperand
是否大于 leftOperand
。 如果是,则引发异常。 查看此声明转换的实时演示。
元素 | TransformationClaimType | 数据类型 | 说明 |
---|---|---|---|
InputClaim | leftOperand | 字符串 | 第一个声明的类型,应晚于第二个声明。 |
InputClaim | rightOperand | 字符串 | 第二个声明的类型,应早于第一个声明。 |
InputParameter | AssertIfEqualTo | boolean | 指定在左操作数等于右操作数时,此断言是否应引发错误。 可能的值为 true (默认)或 false 。 |
InputParameter | AssertIfRightOperandIsNotPresent | boolean | 指定如果缺少右操作数,是否应传递此断言。 |
InputParameter | TreatAsEqualIfWithinMillseconds | int | 指定将两个日期时间视为相等时允许两者之间相差的毫秒数(例如,用于说明时钟偏差)。 |
AssertDateTimeIsGreaterThan 声明转换始终从验证技术配置文件执行,该文件由自断言技术配置文件调用。 DateTimeGreaterThan 自断言技术配置文件元数据控制技术配置文件向用户呈现的错误消息。 可以将错误消息本地化。
AssertDateTimeIsGreaterThan 示例
下面的示例比较 currentDateTime
声明与 approvedDateTime
声明。 如果 currentDateTime
晚于 approvedDateTime
,则引发错误。 如果它们的差异在 5 分钟(30000 毫秒)内,则转换将值视为相等。 如果值相等,则不会引发错误,因为 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 | date | 调用此声明转换后生成的声明类型。 |
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
声明类型。 该声明转换会转换时间格式并向日期添加 12:00:00 AM。 查看此声明转换的实时演示。
元素 | TransformationClaimType | 数据类型 | 说明 |
---|---|---|---|
InputClaim | inputClaim | date | 要转换的声明类型。 |
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 | boolean | 调用此声明转换后生成的声明。 |
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 天)
- 输出声明:
- 结果:true
IsTermsOfUseConsentRequired
确定 dateTime
声明类型是早于还是晚于特定日期。 结果是新布尔型声明,值为 true
或 false
。 查看此声明转换的实时演示。
Item | TransformationClaimType | 数据类型 | 说明 |
---|---|---|---|
InputClaim | termsOfUseConsentDateTime | dateTime | 要检查它是早于还是晚于 termsOfUseTextUpdateDateTime 输入参数的 dateTime 声明类型。 未定义值返回 true 结果。 |
InputParameter | termsOfUseTextUpdateDateTime | dateTime | 要检查它是早于还是晚于 termsOfUseConsentDateTime 输入声明的 dateTime 声明类型。 日期的时间部分可选。 |
OutputClaim | result | boolean | 调用此声明转换后生成的声明类型。 |
使用声明转换,确定 dateTime
声明类型是早于还是晚于特定日期。 例如,检查用户是否已同意最新版本的使用条款 (TOU) 或服务条款。 若要检查用户上次同意的时间,请在扩展属性中存储用户上次接受 TOU 的时间。 当 TOU 文字更改时,使用更改时间更新 termsOfUseTextUpdateDateTime
输入参数。 然后,调用此声明转换来比较日期。 如果声明转换返回 true
,则 termsOfUseConsentDateTime
值早于 termsOfUseTextUpdateDateTime
值,可以要求用户接受更新的 TOU。
<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
- 输出声明:
- 结果: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 存储库中查看更多声明转换示例