POST
https://api.myidvirtual.com
/
auth
/
otp
/
generate
Gerar OTP
curl --request POST \
  --url https://api.myidvirtual.com/auth/otp/generate \
  --header 'Authorization: <authorization>'
{
  "secret": "JBSWY3DPEHPK3PXP",
  "uri": "otpauth://totp/MyIDVirtual:[email protected]?secret=JBSWY3DPEHPK3PXP&issuer=MyIDVirtual",
  "qrCode": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
  "backupCodes": [
    "12345678",
    "87654321",
    "11223344",
    "44332211",
    "55667788"
  ],
  "otpId": "123e4567-e89b-12d3-a456-426614174000"
}

Gerar OTP

Endpoint para gerar um novo código OTP (One-Time Password) com secret BASE32 e URL para configuração em aplicativos autenticadores.

Autenticação

Authorization
string
required
Bearer token JWT do usuário autenticado

Responses

{
  "secret": "JBSWY3DPEHPK3PXP",
  "uri": "otpauth://totp/MyIDVirtual:[email protected]?secret=JBSWY3DPEHPK3PXP&issuer=MyIDVirtual",
  "qrCode": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA...",
  "backupCodes": [
    "12345678",
    "87654321",
    "11223344",
    "44332211",
    "55667788"
  ],
  "otpId": "123e4567-e89b-12d3-a456-426614174000"
}

Exemplo de Requisição

curl --location --request POST 'http://localhost:3333/auth/otp/generate' \
--header 'Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'

Campos da Resposta

Secret e Configuração

secret
string
Chave secreta BASE32 para configuração manual do OTP
uri
string
URI padrão do OTP para importação automática em apps autenticadores
qrCode
string
QR Code em formato base64 para escaneamento com apps autenticadores

Códigos de Backup

backupCodes
array
Lista de códigos de backup para acesso em caso de perda do dispositivo

Identificação

otpId
string
ID único do OTP gerado para referência futura

Configuração em Apps Autenticadores

Apps Suportados

  • Google Authenticator (iOS/Android)
  • Microsoft Authenticator (iOS/Android)

Métodos de Configuração

1. Entrada Manual

// Mostrar secret para entrada manual
const secretDiv = document.createElement('div');
secretDiv.innerHTML = `
  <p>Se não conseguir escanear o QR Code, insira manualmente:</p>
  <code>${otpData.secret}</code>
  <button onclick="copyToClipboard('${otpData.secret}')">Copiar</button>
`;

Troubleshooting

Problemas Comuns

ProblemaCausaSolução
QR Code não carregaErro na geraçãoVerificar se usuário está autenticado
App não reconhece QRURI malformadaTentar entrada manual
Códigos sempre inválidosDessincronia de tempoSincronizar relógio do dispositivo
Backup codes não funcionamCódigos já utilizadosGerar novos códigos
Códigos de backup devem ser armazenados de forma segura e podem ser usados apenas uma vez cada.
Sempre teste a configuração do OTP antes de finalizar. Um código deve ser verificado com sucesso antes de ativar o 2FA.

Próximos Passos

  1. Implemente verificação do OTP gerado
  2. Configure backup codes seguros
  3. Teste diferentes apps autenticadores
  4. Documente o processo para usuários finais
O secret gerado é único por usuário e deve ser mantido confidencial. Se comprometido, gere um novo OTP.