日付要求変換

この記事では、Azure Active Directory B2C (Azure AD B2C) の Identity Experience Framework スキーマの日付要求変換の使用例を示します。 詳細については、「ClaimsTransformations」を参照してください。

AssertDateTimeIsGreaterThan

ある日付が 2 番目の日付よりも後であることをアサートします。 rightOperandleftOperand より大きいかどうかを判定します。 該当する場合は、例外をスローします。 この要求変換のライブ デモをご覧ください。

要素 TransformationClaimType データ型 Notes
InputClaim leftOperand string 最初の要求の型。2 番目の要求よりも後である必要があります。
InputClaim rightOperand string 2 番目の要求の型。最初の要求よりも前である必要があります。
InputParameter AssertIfEqualTo boolean 左オペランドが右オペランドと等しい場合にこのアサーションでエラーをスローするかどうかを指定します。 指定できる値は true(既定値) またはfalseです。
InputParameter AssertIfRightOperandIsNotPresent boolean 右オペランドがない場合にこのアサーションを渡すかどうかを指定します。
InputParameter TreatAsEqualIfWithinMillseconds INT 2 つの日時の間で時刻が等しいと見なすことができるミリ秒数を指定します (たとえば、時刻の誤差を説明)。

AssertDateTimeIsGreaterThan 要求変換は、セルフアサート技術プロファイルによって呼び出される検証技術プロファイルから常に実行する必要があります。 DateTimeGreaterThan セルフアサート技術プロファイル メタデータでは、技術プロファイルによってユーザーに表示されるエラー メッセージを制御します。 エラー メッセージは、ローカライズできます。

AssertStringClaimsAreEqual 要求変換の使用方法を示す図。

AssertDateTimeIsGreaterThan の例

次の例では、currentDateTime 要求を approvedDateTime 要求と比較します。 currentDateTimeapprovedDateTime より後の場合にエラーがスローされます。 変換で、値が 5 分間 (30,000 ミリ秒) の差以内である場合に等価として扱われます。 AssertIfEqualTofalse に設定されているので、値が等しい場合、エラー はスローされません。

<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入力パラメーターを削除し、currentDateTimeapprovedDateTime と等しい場合、エラーがスローされます。 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 次のいずれかの値: samelater thanearlier 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 リポジトリをご覧ください