Skip to main content

MFA — segundo fator (TOTP)

Tela onde a pessoa confirma o código de 6 dígitos do aplicativo autenticador (Google Authenticator, Authy, etc.) para concluir o login, quando a conta tem o segundo fator (TOTP) habilitado.

Tela pedindo o código de verificação, com seis caixas para os dígitos e o botão Validar

Antes de começar​

  • Rota: /:tenant/authorization/mfa.
  • Componente: MfaLoginComponent (@pages/authentication/mfa-login).
  • Só se chega aqui vindo do Login: a pessoa já digitou e-mail e senha corretos, e a conta tem TOTP habilitado. Não é possível abrir esta tela diretamente sem ter passado pelo login (o desafio TOTP é emitido pela própria chamada de login).
  • É preciso ter o app autenticador já configurado com o segredo TOTP da conta (isso é feito em Minha conta › Segurança, fora do escopo desta tela).

:::info SafeID usa outra experiência Quando a conta tem SafeID em vez de TOTP, o login não passa por esta tela: ele redireciona direto para a página de autorização do provedor externo SafeID. :::

Permissões e acesso​

Pública — mas só é útil com um desafio de MFA válido em andamento (emitido minutos antes pelo login). A rota está no grupo :tenant/authorization, protegida por guestGuard como as demais telas de login.

Caminho principal​

  1. A pessoa abre o app autenticador, lê o código de 6 dígitos do momento e digita nas seis caixas (p-inputotp, um dígito por caixa, aceita só números).
  2. Clica em Validar.
  3. Se o código confere, o Portal cria a sessão com nível de confiança MFA e leva a pessoa para a área logada (mesma lógica de retorno do login: volta para a URL que ela tentou acessar antes).
  4. Se preferir, pode clicar em Voltar para o Login para recomeçar do zero.

Este fluxo foi confirmado de ponta a ponta neste levantamento: login com uma conta com TOTP habilitado, cálculo do código de 6 dígitos a partir do segredo TOTP da conta e confirmação bem- sucedida, chegando à área logada (/exams).

Estados e mensagens​

EstadoQuando apareceMensagem exibidaPrint
Código incorreto ou expiradoO código digitado não confere, ou o desafio já expirouToast: "Código de verificação incorreto ou expirado."Toast de erro Código de verificação incorreto ou expirado, com as seis caixas ainda preenchidas com zeros

Validações de frontend​

CampoRegraEfeito
CódigoObrigatório, exatamente 6 dígitos numéricos (Validators.pattern('[0-9]{6}'))Se inválido ao clicar em Validar, mostra toast "Código de verificação inválido." sem chamar a API

Validações e falhas de backend​

SituaçãoOnde é validadaComportamentoComo se recupera
Código errado ou desafio expiradoPOST /authentication/totp/verifyA tentativa é contada; ao atingir o limite, o desafio é consumido (mesma mensagem de erro, sem aviso adicional)Solicitar um novo login para gerar outro desafio
Muitas tentativas em pouco tempoRate limit (10 requisições/60s por token)429 RATE_LIMIT_EXCEEDEDAguardar e tentar novamente
Erro de redeRequisição HTTP falhaToast "LOGIN.ERRORS.NETWORK"Verificar conexão e tentar novamente

Regras de negócio​

IDRegraO que a tela reflete
RN-01O desafio TOTP tem validade curta (IDENTITY_TOTP_CHALLENGE_TTL_MINUTES, default 10 min)Passado esse tempo, o código correto também é recusado como "incorreto ou expirado"
RN-02Código errado repetidas vezes esgota o desafioDepois do limite de tentativas, é preciso voltar ao login para gerar um novo desafio — a mensagem de erro não muda

Informações técnicas​

Rota da tela: /:tenant/authorization/mfa · Acesso: Público, condicionado a um desafio de MFA emitido pelo login

Rotas de API consumidas:

MétodoRotaQuando é chamada
POST/v1/authentication/totp/verifyAo clicar em Validar

→ Detalhe da rota: Segundo fator: TOTP e SafeID — API

Relacionado​