Partilhar via


Transformações de afirmações de data

Este artigo fornece exemplos para utilizar as transformações de afirmações de data do esquema do Identity Experience Framework no Azure Active Directory B2C (Azure AD B2C). Para obter mais informações, veja transformações de afirmações.

AssertDateTimeIsGreaterThan

Afirma que uma data é posterior a uma segunda data. Determina se o rightOperand é maior que o leftOperand. Se sim, gera uma exceção. Veja a demonstração em direto desta transformação de afirmações.

Elemento TransformationClaimType Tipo de Dados Notas
InputClaim leftOperand string O tipo da primeira afirmação, que deve ser posterior à segunda afirmação.
InputClaim rightOperand string Tipo de segunda afirmação, que deve ser anterior à primeira afirmação.
InputParameter AssertIfEqualTo boolean Especifica se esta afirmação deve gerar um erro se o operando esquerdo for igual ao operando direito. Valores possíveis: true (predefinição) ou false.
InputParameter AssertIfRightOperandIsNotPresent boolean Especifica se esta afirmação deve passar se o operando certo estiver em falta.
InputParameter TreatAsEqualIfWithinMillseconds int Especifica o número de milissegundos a permitir entre as duas horas de data para considerar as horas iguais (por exemplo, para contabilizar a distorção do relógio).

A transformação de afirmações AssertDateTimeIsGreaterThan é sempre executada a partir de um perfil técnico de validação chamado por um perfil técnico auto-afirmado. Os metadados de perfil técnico dateTimeGreaterThan auto-afirmado controlam a mensagem de erro que o perfil técnico apresenta ao utilizador. As mensagens de erro podem ser localizadas.

Os diagramas mostram como utilizar a transformação de afirmações AssertStringClaimsAreEqual.

Exemplo de AssertDateTimeIsGreaterThan

O exemplo seguinte compara a currentDateTime afirmação com a approvedDateTime afirmação. É emitido um erro se currentDateTime for posterior a approvedDateTime. A transformação trata os valores como iguais se estiverem dentro de 5 minutos (30000 milissegundos) de diferença. Não emitirá um erro se os valores forem iguais porque AssertIfEqualTo estão definidos como 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>

Nota

No exemplo acima, se remover o AssertIfEqualTo parâmetro de entrada e for currentDateTime igual aapprovedDateTime, será emitido um erro. O AssertIfEqualTo valor predefinido é true.

  • Afirmações de entrada:
    • leftOperand: 2022-01-01T15:00:00
    • rightOperand: 2022-01-22T15:00:00
  • Parâmetros de entrada:
    • AssertIfEqualTo: false
    • AssertIfRightOperandIsNotPresent: true
    • TreatAsEqualIfWithinMillseconds: 300000 (30 segundos)
  • Resultado: Erro emitido

Chamar a transformação de afirmações

O seguinte Example-AssertDates perfil técnico de validação chama a transformação de AssertApprovedDateTimeLaterThanCurrentDateTime afirmações.

<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>

O perfil técnico auto-afirmado chama o perfil técnico de validação 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

Converte um tipo de DateTime afirmação num tipo de Date afirmação. A transformação de afirmações remove o formato de hora da data. Veja a demonstração em direto desta transformação de afirmações.

Elemento TransformationClaimType Tipo de Dados Notas
InputClaim inputClaim dateTime O tipo de afirmação a converter.
OutputClaim outputClaim data O tipo de afirmação produzido após a invocação desta transformação de afirmações.

Exemplo de ConvertDateTimeToDateClaim

O exemplo seguinte demonstra a conversão da afirmação systemDateTime (tipo de dados dateTime) para outra afirmação systemDate (tipo de dados de data).

<ClaimsTransformation Id="ConvertToDate" TransformationMethod="ConvertDateTimeToDateClaim">
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="systemDateTime" TransformationClaimType="inputClaim" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="systemDate" TransformationClaimType="outputClaim" />
  </OutputClaims>
</ClaimsTransformation>
  • Afirmações de entrada:
    • inputClaim: 2022-01-03T11:34:22.0000000Z
  • Afirmações de saída:
    • outputClaim: 2022-01-03

ConvertDateToDateTimeClaim

Converte um tipo de Date afirmação num tipo de DateTime afirmação. A transformação de afirmações converte o formato de hora e adiciona 00:00 à data. Veja a demonstração em direto desta transformação de afirmações.

Elemento TransformationClaimType Tipo de Dados Notas
InputClaim inputClaim data O tipo de afirmação a converter.
OutputClaim outputClaim dateTime O tipo de afirmação produzido após a invocação desta transformação de afirmações.

Exemplo de ConvertDateToDateTimeClaim

O exemplo seguinte demonstra a conversão da afirmação dateOfBirth (tipo de dados de data) para outra afirmação dateOfBirthWithTime (tipo de dados dateTime).

  <ClaimsTransformation Id="ConvertToDateTime" TransformationMethod="ConvertDateToDateTimeClaim">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="dateOfBirth" TransformationClaimType="inputClaim" />
    </InputClaims>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="dateOfBirthWithTime" TransformationClaimType="outputClaim" />
    </OutputClaims>
  </ClaimsTransformation>
  • Afirmações de entrada:
    • inputClaim: 2022-01-03
  • Afirmações de saída:
    • outputClaim: 2022-01-03T00:00:00.0000000Z

DateTimeComparison

Compara duas datas e determina se a primeira data é posterior, anterior ou igual a outra. O resultado é uma nova afirmação booleana com um valor de true ou false. Veja a Demonstração em direto desta transformação de afirmações.

Elemento TransformationClaimType Tipo de Dados Notas
InputClaim firstDateTime dateTime A primeira data para comparar se é posterior, anterior ou igual à segunda data. O valor nulo gera uma exceção.
InputClaim secondDateTime dateTime A segunda data a comparar. O valor nulo é tratado como a data e hora atuais.
InputParameter timeSpanInSeconds int Período de tempo a adicionar à primeira data. Valores possíveis: variam entre negativo -2.147.483.648 e positivo 2.147.483.647.
InputParameter operador string Um dos seguintes valores: same, later thanou earlier than.
OutputClaim result boolean A afirmação que é produzida após esta transformação de afirmações ter sido invocada.

Exemplo de DateTimeComparison

Utilize esta transformação de afirmações para determinar se a primeira data mais o timeSpanInSeconds parâmetro é posterior, anterior ou igual a outra. O exemplo seguinte mostra que a primeira data (2022-01-01T00:00:00) mais 90 dias é posterior à segunda data (2022-03-16T00:00: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>
  • Afirmações de entrada:
    • firstDateTime: 2022-01-01T00:00:00.100000Z
    • secondDateTime: 2022-03-16T00:00:00.100000Z
  • Parâmetros de entrada:
    • operador: posterior a
    • timeSpanInSeconds: 7776000 (90 dias)
  • Afirmações de saída:
    • resultado: verdadeiro

IsTermsOfUseConsentRequired

Determine se um tipo de dateTime afirmação é anterior ou superior a uma data específica. O resultado é uma nova afirmação booleana com um valor de true ou false. Veja a Demonstração em direto desta transformação de afirmações.

Item TransformationClaimType Tipo de dados Notas
InputClaim termsOfUseConsentDateTime dateTime O dateTime tipo de afirmação para verificar se é anterior ou posterior ao termsOfUseTextUpdateDateTime parâmetro de entrada. O valor indefinido devolve true o resultado.
InputParameter termsOfUseTextUpdateDateTime dateTime O dateTime tipo de afirmação para verificar se é anterior ou posterior à termsOfUseConsentDateTime afirmação de entrada. A parte da hora da data é opcional.
OutputClaim result boolean O tipo de afirmação produzido após esta transformação de afirmações ter sido invocada.

Utilize esta transformação de afirmações para determinar se um dateTime tipo de afirmação é anterior ou superior a uma data específica. Por exemplo, verifique se um utilizador deu consentimento para a versão mais recente dos seus termos de utilização (TOU) ou termos de serviço. Para verificar a última vez que um utilizador consentiu, armazene a última vez que o utilizador aceitou a TOU num atributo de extensão. Quando a sua redação tou for alterada, atualize o termsOfUseTextUpdateDateTime parâmetro de entrada com a hora da alteração. Em seguida, chame esta transformação de afirmações para comparar as datas. Se a transformação de afirmações devolver true, o termsOfUseConsentDateTime valor é anterior ao termsOfUseTextUpdateDateTime valor e pode pedir ao utilizador para aceitar a TOU atualizada.

<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>

Exemplo isTermsOfUseConsentRequired

  • Afirmações de entrada:
    • termsOfUseConsentDateTime: 2020-03-09T09:15:00
  • Parâmetros de entrada:
    • termsOfUseTextUpdateDateTime: 2021-11-15
  • Afirmações de saída:
    • resultado: verdadeiro

GetCurrentDateTime

Obtenha a data e hora UTC atuais e adicione o valor a um tipo de afirmação. Veja a Demonstração em direto desta transformação de afirmações.

Elemento TransformationClaimType Tipo de Dados Notas
OutputClaim currentDateTime dateTime O tipo de afirmação que é produzido após esta transformação de afirmações ter sido invocada.

Exemplo de GetCurrentDateTime

O exemplo seguinte mostra como obter os dados e a hora atuais:

<ClaimsTransformation Id="GetSystemDateTime" TransformationMethod="GetCurrentDateTime">
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="systemDateTime" TransformationClaimType="currentDateTime" />
  </OutputClaims>
</ClaimsTransformation>
  • Afirmações de saída:
    • currentDateTime: 2022-01-14T11:40:35.0000000Z

Passos seguintes