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.
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
- Encontre mais amostras de transformação de declarações no repositório GitHub da comunidade do Azure AD B2C