Definir um perfil técnico de senha única do Azure AD SSPR em uma política personalizada do Azure AD B2C

Observação

No Azure Active Directory B2C, as políticas personalizadas são projetadas principalmente para tratar de cenários complexos. Para a maioria dos cenários, recomendamos que você use fluxos de usuários predefinidos. Se você ainda não fez isso, saiba mais sobre o pacote de início de política personalizado em Introdução às políticas personalizadas no Active Directory B2C.

O Azure Active Directory B2C (Azure AD B2C) fornece suporte para gerenciar a geração e a verificação de uma senha única. Use um perfil técnico para gerar um código e, em seguida, verifique esse código mais tarde.

O perfil técnico de senha única também pode retornar uma mensagem de erro durante a verificação de código. Projete a integração com a senha única usando um perfil técnico de validação. Um perfil técnico de validação chama o perfil técnico de senha única para verificar um código. O perfil técnico de validação valida os dados fornecido pelo usuário para que o percurso do usuário continue. Com o perfil técnico de validação, uma mensagem de erro é exibida em uma página autodeclarada.

Protocolo

O atributo Name do elemento Protocol precisa ser definido como Proprietary. O atributo handler deve conter o nome totalmente qualificado do assembly do manipulador de protocolo usado pelo Azure AD B2C:

Web.TPEngine.Providers.OneTimePasswordProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null

O exemplo a seguir mostra um perfil técnico RESTful de senha única:

<TechnicalProfile Id="VerifyCode">
  <DisplayName>Validate user input verification code</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.OneTimePasswordProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  ...

Gerar código

O primeiro modo deste perfil técnico é a geração de um código. Abaixo estão as opções que podem ser configuradas para esse modo. Códigos gerados e tentativas são rastreados dentro da sessão.

Declarações de entrada

O elemento InputClaims contém uma lista de declarações necessárias para enviar ao provedor de protocolo de senha única. Você também pode mapear o nome de sua declaração para o nome definido abaixo.

ClaimReferenceId Obrigatório Descrição
identificador Sim O identificador para identificar o usuário que precisa verificar o código mais tarde. Normalmente, ele é usado como o identificador do destino para o qual o código é entregue, por exemplo, endereço de email ou número de telefone.

O elemento InputClaimsTransformations pode conter uma coleção de elementos InputClaimsTransformation usados para modificar as declarações de entrada ou gerar novas antes do envio ao provedor de protocolo de senha única.

Declarações de saída

O elemento OutputClaims contém uma lista de declarações geradas pelo provedor de protocolo de senha única. Você também pode mapear o nome de sua declaração para o nome definido abaixo.

ClaimReferenceId Obrigatório Descrição
otpGenerated Sim O código gerado cuja sessão é gerenciada por Azure AD B2C.

O elemento OutputClaimsTransformations pode conter uma coleção de elementos OutputClaimsTransformation usados para modificar as declarações de saída ou gerar novas declarações.

Metadados

As seguintes configurações podem ser usadas para configurar o modo de geração de código:

Atributo Obrigatório Descrição
Operação Sim A operação a ser executada. Valor possível: GenerateCode.
CodeExpirationInSeconds Não Tempo em segundos até a expiração do código. Mínimo: 60; Máximo: 1200; Padrão: 600. Sempre que um código é fornecido (mesmo código usando ReuseSameCode ou um novo código), a expiração do código é estendida. Esse tempo também é usado para definir o tempo máximo de nova tentativa (depois que o máximo de tentativas é atingido, o usuário é bloqueado para tentar obter novos códigos até que esse tempo expire)
CodeLength Não Comprimento do código. O valor padrão é 6.
CharacterSet Não O conjunto de caracteres para o código formatado para uso em uma expressão regular. Por exemplo, a-z0-9A-Z. O valor padrão é 0-9. O conjunto de caracteres deve incluir um mínimo de 10 caracteres diferentes no conjunto especificado.
NumRetryAttempts Não O número de tentativas de verificação antes de o código ser considerado inválido. O valor padrão é 5. Por exemplo, se você definir NumRetryAttempts como 2, isso permitirá apenas 2 tentativas no total (a primeira e 1 repetição). Para a 3ª tentativa, o máximo de tentativas atingidas será gerado, independentemente do código correto.
NumCodeGenerationAttempts Não O número de tentativas de geração de código máximo por identificador. O valor padrão será 10 se não for especificado.
ReuseSameCode Não Se o mesmo código deve ser fornecido em vez de gerar um novo código quando determinado código não tiver expirado e ainda for válido. O valor padrão é false.

Exemplo

O exemplo a seguir TechnicalProfile é usado para gerar um código:

<TechnicalProfile Id="GenerateCode">
  <DisplayName>Generate Code</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.OneTimePasswordProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="Operation">GenerateCode</Item>
    <Item Key="CodeExpirationInSeconds">600</Item>
    <Item Key="CodeLength">6</Item>
    <Item Key="CharacterSet">0-9</Item>
    <Item Key="NumRetryAttempts">5</Item>
    <Item Key="NumCodeGenerationAttempts">10</Item>
    <Item Key="ReuseSameCode">false</Item>
  </Metadata>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="identifier" PartnerClaimType="identifier" />
  </InputClaims>
  <OutputClaims>
    <OutputClaim ClaimTypeReferenceId="otpGenerated" PartnerClaimType="otpGenerated" />
  </OutputClaims>
</TechnicalProfile>

Verificar o código

O segundo modo desse perfil técnico é a verificação de um código. Abaixo estão as opções que podem ser configuradas para esse modo.

Declarações de entrada

O elemento InputClaims contém uma lista de declarações necessárias para enviar ao provedor de protocolo de senha única. Você também pode mapear o nome de sua declaração para o nome definido abaixo.

ClaimReferenceId Obrigatório Descrição
identificador Sim O identificador para identificar o usuário que gerou um código anteriormente. Normalmente, ele é usado como o identificador do destino para o qual o código é entregue, por exemplo, endereço de email ou número de telefone.
otpToVerify Sim O código de verificação fornecido pelo usuário.

O elemento InputClaimsTransformations pode conter uma coleção de elementos InputClaimsTransformation usados para modificar as declarações de entrada ou gerar novas antes do envio ao provedor de protocolo de senha única.

Declarações de saída

Não há declarações de saída fornecidas durante a verificação de código desse provedor de protocolo.

O elemento OutputClaimsTransformations pode conter uma coleção de elementos OutputClaimsTransformation usados para modificar as declarações de saída ou gerar novas declarações.

Metadados

As configurações a seguir podem ser usadas para o modo de verificação de código:

Atributo Obrigatório Descrição
Operação Sim A operação a ser executada. Valor possível: VerifyCode.

Elementos da interface do usuário

Os metadados a seguir podem ser usados para configurar as mensagens de erro exibidas após a falha da verificação do código. Os metadados devem ser configurados no perfil técnico autodeclarado. A mensagem de erro pode ser localizada.

Atributo Obrigatório Descrição
UserMessageIfSessionDoesNotExist Não A mensagem a ser exibida ao usuário se a sessão de verificação de código expirar. O código expirou ou nunca foi gerado para um determinado identificador.
UserMessageIfMaxRetryAttempted Não A mensagem a ser exibida para o usuário se ele tiver excedido o máximo de tentativas de verificação permitidas.
UserMessageIfMaxNumberOfCodeGenerated Não A mensagem a ser exibida para o usuário se a geração de código tiver excedido o número máximo permitido de tentativas.
UserMessageIfInvalidCode Não A mensagem a ser exibida para o usuário se ele tiver fornecido um código inválido.
UserMessageIfVerificationFailedRetryAllowed Não A mensagem a ser exibida ao usuário se ele tiver fornecido um código inválido e não tiver permissão para fornecer o correto.
UserMessageIfSessionConflict Não A mensagem a ser exibida para o usuário se o código não puder ser verificado.

Exemplo

O exemplo a seguir TechnicalProfile é usado para gerar um código:

<TechnicalProfile Id="VerifyCode">
  <DisplayName>Verify Code</DisplayName>
  <Protocol Name="Proprietary" Handler="Web.TPEngine.Providers.OneTimePasswordProtocolProvider, Web.TPEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
  <Metadata>
    <Item Key="Operation">VerifyCode</Item>
  </Metadata>
  <InputClaims>
    <InputClaim ClaimTypeReferenceId="identifier" PartnerClaimType="identifier" />
    <InputClaim ClaimTypeReferenceId="otpGenerated" PartnerClaimType="otpToVerify" />
  </InputClaims>
</TechnicalProfile>

Próximas etapas

Consulte o seguinte artigo para ver o exemplo de uso de perfil técnico de senha única com verificação de email personalizada:

  • Verificação de email personalizada no Azure Active Directory B2C (Mailjet, SendGrid)