Construtor de otpauth:// URI para TOTP
Monta URI otpauth://totp/ com issuer, conta, secret base32, dígitos e período para gerar QR code do Google Authenticator.
—
Montando o URI de provisionamento TOTP sem erro
Você terminou o TOTP no backend, gerou o segredo em base32 e agora precisa entregá-lo ao app do usuário. O Authenticator não lê um segredo solto: ele espera uma string no formato otpauth://totp/, com o rótulo da conta e os parâmetros na query. Basta esquecer o issuer ou deixar o e-mail sem escapar para o app importar a conta com nome errado, ou recusar a importação sem explicar o motivo.
O rótulo aqui é montado como issuer:conta, cada parte passando por percent-encoding separadamente, e o issuer aparece de novo como parâmetro. Não é redundância boba: apps antigos leem o prefixo do rótulo, apps novos preferem o parâmetro, e o padrão do Google recomenda os dois. O secret é validado só quanto ao alfabeto base32 (A-Z, 2-7 e =), com espaços removidos e tudo em maiúsculas. Não há conferência de comprimento nem de checksum.
A página devolve o texto do URI, não desenha o QR code: copie a string e jogue em um gerador de QR quando for exibir na tela de cadastro. Antes disso, confira que o segredo é exatamente o que o servidor persistiu, e troque o valor de exemplo JBSWY3DPEHPK3PXP, que é público e aparece em toda documentação. O script não faz nenhuma requisição: a montagem acontece no seu navegador, e o segredo nunca sai dele.
Perguntas frequentes
Preciso repetir o issuer no rótulo e na query?
Posso usar SHA256 ou códigos de 8 dígitos?
A ferramenta gera o QR code do segredo?
Ferramentas Relacionadas
Validador de Configuração CORS
Valide uma configuração de CORS (origens permitidas ou *), conferindo o formato e duplicatas. Útil para configurar APIs e servidores web com segurança.
Gerador de Referrer-Policy
Monta o header Referrer-Policy a partir de um valor padrão (strict-origin, no-referrer, etc.).
Gerador de Permissions-Policy
Monta o header Permissions-Policy a partir de uma lista feature=allowlist (ex: geolocation=()).