日付要求変換
この記事では、Azure Active Directory B2C (Azure AD B2C) の Identity Experience Framework スキーマの日付要求変換の使用例を示します。 詳細については、「ClaimsTransformations」を参照してください。
AssertDateTimeIsGreaterThan
ある日付が 2 番目の日付よりも後であることをアサートします。
rightOperand
が leftOperand
より大きいかどうかを判定します。 該当する場合は、例外をスローします。 この要求変換のライブ デモをご覧ください。
要素 | TransformationClaimType | データ型 | Notes |
---|---|---|---|
InputClaim | leftOperand | string | 最初の要求の型。2 番目の要求よりも後である必要があります。 |
InputClaim | rightOperand | string | 2 番目の要求の型。最初の要求よりも前である必要があります。 |
InputParameter | AssertIfEqualTo | boolean | 左オペランドが右オペランドと等しい場合にこのアサーションでエラーをスローするかどうかを指定します。 指定できる値は true (既定値) またはfalse です。 |
InputParameter | AssertIfRightOperandIsNotPresent | boolean | 右オペランドがない場合にこのアサーションを渡すかどうかを指定します。 |
InputParameter | TreatAsEqualIfWithinMillseconds | INT | 2 つの日時の間で時刻が等しいと見なすことができるミリ秒数を指定します (たとえば、時刻の誤差を説明)。 |
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 | データ型 | Notes |
---|---|---|---|
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 秒が追加されます。 この要求変換のライブ デモをご覧ください。
要素 | TransformationClaimType | データ型 | Notes |
---|---|---|---|
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
2 つの日付を比較し、最初の日付がもう一つの日付より後であるか、前であるか、または等しいかを判定します。 結果は、true
または false
の値を含む新しいブール値要求です。 この要求変換のライブ デモをご覧ください。
要素 | TransformationClaimType | データ型 | Notes |
---|---|---|---|
InputClaim | firstDateTime | dateTime | 2 番目の日付より後であるか、前であるか、または等しいかを比較する最初の日付。 Null 値の場合は例外がスローされます。 |
InputClaim | secondDateTime | dateTime | 比較する 2 番目の日付。 null 値は、現在の日付として扱われます。 |
InputParameter | timeSpanInSeconds | INT | 最初の日付に追加する期間。 指定できる値: 負の -2,147,483,648 から正の 2,147,483,647 までの範囲。 |
InputParameter | operator | string | 次のいずれかの値: same 、later than 、earlier than 。 |
OutputClaim | 結果 | boolean | この要求変換が呼び出された後に生成される要求。 |
DateTimeComparison の例
この要求変換を使用して、最初の日付に timeSpanInSeconds
パラメーターを加えた値が別の日付より後であるか、前であるか、または等しいかを判定します。 次の例は、最初の日付 (2022-01-01T00:00:00) に 90 日を加えた値が 2 番目の日付 (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
- 入力パラメーター:
- 演算子: later than
- timeSpanInSeconds: 7776000 (90 日間)
- 出力要求:
- result: true
IsTermsOfUseConsentRequired
dateTime
要求の種類が特定の日付より前か後かを判定します。 結果は、true
または false
の値を含む新しいブール値要求です。 この要求変換のライブ デモをご覧ください。
Item | TransformationClaimType | データ型 | Notes |
---|---|---|---|
InputClaim | termsOfUseConsentDateTime | dateTime |
termsOfUseTextUpdateDateTime 入力パラメーターより前か後かを確認する dateTime 要求の種類。 未定義の値の場合は true の結果が返されます。 |
InputParameter | termsOfUseTextUpdateDateTime | dateTime |
termsOfUseConsentDateTime 入力要求より前か後かを確認する dateTime 要求の種類。 日付の時刻部分は省略可能です。 |
OutputClaim | 結果 | 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
- 出力要求:
- result: true
GetCurrentDateTime
現在の UTC 日時を取得し、その値を要求の種類に追加します。 この要求変換のライブ デモをご覧ください。
要素 | TransformationClaimType | データ型 | Notes |
---|---|---|---|
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 リポジトリをご覧ください