Transformações de declarações de data

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

AssertDateTimeIsGreaterThan

Declara que uma data é posterior a uma segunda data. Determina se o rightOperand é maior que o leftOperand. Em caso afirmativo, gera uma exceção. Confira a Demonstração ao vivo desta transformação de declarações.

Elemento TransformationClaimType Tipo de Dados Observações
InputClaim leftOperand string O tipo da primeira declaração, que deve ser posterior à segunda declaração.
InputClaim rightOperand string O tipo da segunda declaração, que deve ser anterior à primeira declaração.
InputParameter AssertIfEqualTo booleano Especifica se essa declaração deve gerar um erro se o operando esquerdo for igual ao operando direito. Valores possíveis: true (padrão) ou false.
InputParameter AssertIfRightOperandIsNotPresent booleano Especifica se essa declaração deve passar se o operando à direita estiver ausente.
InputParameter TreatAsEqualIfWithinMillseconds INT Especifica o número de milissegundos para permitir entre as duas datas e horas para considerar os tempos de igual (por exemplo, a conta para defasagem horária).

A transformação de declarações AssertDateTimeIsGreaterThan é sempre executada a partir um perfil técnico de validação que é chamado por um perfil técnico autodeclarado. Os metadados DateTimeGreaterThan do perfil técnico autodeclarado controla a mensagem de erro que o perfil técnico apresenta ao usuário. A mensagem de erro pode ser localizada.

Os diagramas mostram como usar a transformação de declarações AssertStringClaimsAreEqual.

Exemplo de AssertDateTimeIsGreaterThan

O exemplo a seguir compara as currentDateTime declarações à declaração approvedDateTime. Um erro será gerado se currentDateTime for posterior a approvedDateTime. A transformação trata valores como iguais se eles estiverem dentro de diferença de (30000 milissegundos) de 5 minutos. Ele não gerará um erro se os valores forem iguais porque AssertIfEqualTo está definido 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>

Observação

No exemplo acima, se você remover o parâmetro de entrada AssertIfEqualTo e currentDateTime for igual a approvedDateTime, um erro será gerado. O valor padrão AssertIfEqualTo será true.

  • Declaraçõ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 gerado

Chamar a transformação de declarações

O perfil técnico de validação Example-AssertDates a seguir chama a transformação de declarações 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>

O perfil técnico autodeclarado 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 declaração DateTime em um tipo de declaração Date. A transformação de declarações remove o formato de hora da data. Confira a Demonstração ao vivo desta transformação de declarações.

Elemento TransformationClaimType Tipo de Dados Observações
InputClaim InputClaim dateTime O tipo de declaração a ser convertido.
OutputClaim outputClaim date O tipo de declaração que é produzido depois de invocar esta transformação de declarações.

Exemplo de ConvertDateTimeToDateClaim

O exemplo a seguir demonstra a conversão da declaração systemDateTime (tipo de dados dateTime) para outra declaraçã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>
  • Declarações de entrada:
    • inputClaim: 2022-01-03T11:34:22.0000000Z
  • Declarações de saída:
    • outputClaim: 2022-01-03

ConvertDateToDateTimeClaim

Converte um tipo de declaração Date em um tipo de declaração DateTime. A transformação de declarações converte o formato de hora e adiciona 12:00:00 AM à data. Confira a Demonstração ao vivo desta transformação de declarações.

Elemento TransformationClaimType Tipo de Dados Observações
InputClaim InputClaim date O tipo de declaração a ser convertido.
OutputClaim outputClaim dateTime O tipo de declaração que é produzido depois de invocar esta transformação de declarações.

Exemplo de ConvertDateToDateTimeClaim

O exemplo a seguir demonstra a conversão da declaração dateOfBirth (tipo de dados de data) para uma outra declaração dateOfBirthWithTime (tipo de dados de data e hora).

  <ClaimsTransformation Id="ConvertToDateTime" TransformationMethod="ConvertDateToDateTimeClaim">
    <InputClaims>
      <InputClaim ClaimTypeReferenceId="dateOfBirth" TransformationClaimType="inputClaim" />
    </InputClaims>
    <OutputClaims>
      <OutputClaim ClaimTypeReferenceId="dateOfBirthWithTime" TransformationClaimType="outputClaim" />
    </OutputClaims>
  </ClaimsTransformation>
  • Declarações de entrada:
    • inputClaim: 2022-01-03
  • Declaraçõ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 declaração booliana com um valor de true ou false. Confira a Demonstração ao vivo desta transformação de declarações.

Elemento TransformationClaimType Tipo de Dados Observações
InputClaim firstDateTime dateTime A primeira data a ser comparada se ela é posterior, anterior ou igual à segunda data. Valor nulo gerará uma exceção.
InputClaim secondDateTime dateTime A segunda data a ser comparada. Valor nulo é tratado como data e hora atuais.
InputParameter timeSpanInSeconds INT Período de tempo a ser acrescentado à primeira data. Valores possíveis: intervalo de -2.147.483.648 negativos a 2.147.483.647 positivos.
InputParameter operador string Um dos seguintes valores: same, later than ou earlier than.
OutputClaim result booleano A declaração que é produzida após a invocação dessa transformação de declarações.

Exemplo de DateTimeComparison

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

IsTermsOfUseConsentRequired

Determine se um tipo de declaração dateTime é anterior ou maior que uma data específica. O resultado é uma nova declaração booliana com um valor de true ou false. Confira a Demonstração ao vivo desta transformação de declarações.

Item TransformationClaimType Tipo de dados Observações
InputClaim termsOfUseConsentDateTime dateTime O tipo de declaração dateTime para verificar se ele é anterior ou posterior ao parâmetro de entrada termsOfUseTextUpdateDateTime. O valor indefinido retorna o resultado true.
InputParameter termsOfUseTextUpdateDateTime dateTime O tipo de declaração dateTime para verificar se ele é anterior ou posterior à declaração de entrada termsOfUseConsentDateTime. A hora da data é opcional.
OutputClaim result booleano O tipo de declaração que é produzido depois de invocar esta transformação de declarações.

Use a transformação dessa declaração para determinar se um tipo de declaração dateTime é anterior ou maior que uma data específica. Por exemplo, verifique se um usuário consentiu com a versão mais recente de seus termos de uso (TU) ou termos de serviço. Para verificar a última vez que um usuário consentiu, armazene a última vez que o usuário aceitou o TU em um atributo de extensão. Quando o texto da sua TU mudar, atualize o parâmetro de entrada termsOfUseTextUpdateDateTime com a hora da alteração. Em seguida, chame essa transformação de declarações para comparar as datas. Se a transformação de declarações retornar true, o valor termsOfUseConsentDateTime será anterior ao valor termsOfUseTextUpdateDateTime e você poderá solicitar que o usuário aceite o TU atualizado.

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

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

GetCurrentDateTime

Obtenha a data UTC atual e a hora e adicione o valor para um tipo de declaração. Confira a Demonstração ao vivo desta transformação de declarações.

Elemento TransformationClaimType Tipo de Dados Observações
OutputClaim currentDateTime dateTime O tipo de declaração que é produzido depois de invocar esta transformação de declarações.

Exemplo de GetCurrentDateTime

O exemplo a seguir mostra como obter a data e a hora atuais:

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

Próximas etapas