MFA para os usuários do seu app
O SuperDB oferece TOTP (Google Authenticator, 1Password, Authy) pronto no SDK. Você decide quem precisa ativar — a regra de negócio é sua.
// 1) gera o segredo e o QR para o usuário escanear
const { data } = await db.auth.mfa.enroll({ factor_type: 'totp' })
// data traz o secret/otpauth URI — renderize como QR code
// 2) confirme com o código de 6 dígitos que o app mostrou
await db.auth.mfa.verify({ factor_id: data.id, code: '123456' })
// 3) consulte os fatores ativos do usuário logado
const { data: f } = await db.auth.mfa.factors()
Guarde no seu banco quem já ativou (ex.: uma coluna em profiles) e use isso
para exigir MFA nas telas sensíveis do seu produto.
Exigir MFA por role (ainda não é self-serve)
Forçar MFA no nível da plataforma para determinadas roles não é configurável pelo dashboard nem por API hoje. O padrão em vigor é: MFA opcional, bloqueio de força bruta após 10 tentativas por 15 minutos. Se o seu contrato exige enforcement por role, fale com o suporte — é habilitado caso a caso.
Enquanto isso, o enforcement fica no seu app: ao detectar que o usuário tem uma role sensível e não tem fator ativo, redirecione para a tela de cadastro de MFA antes de liberar a área restrita.
MFA na sua conta SuperDB
É outra coisa: protege o seu login no app.superdb.com.br (quem administra os projetos), não os usuários do seu app. Configure no menu da sua conta.
Troubleshooting
Usuário perdeu o dispositivo e não tem recovery codes
Como você guarda no seu banco quem tem MFA, o caminho é: remova o fator do usuário pela sua própria área administrativa (chamando o SuperDB com a sua service key a partir do backend) e peça que ele cadastre de novo. Nunca exponha esse fluxo no cliente.
Código sempre inválido
TOTP depende de relógio: confira se a hora do celular está no automático. Uma diferença maior que 30 segundos já invalida os códigos.