Estoy creando esta URL de código QR:
otpauth://totp/TEST:asfadsf?secret=CBPhavYImNauHrVP9KuoR5eE2fO-b_7s&issuer=TEST&algorithm=SHA-1&digits=6&period=30
Si estoy escaneando este código con el autenticador de Google en iOS, recibo el mensaje:
"El código no es un token de autenticación válido"
¿Hay algo mal en mi código QR?
Tuve problemas similares y los arreglé de la siguiente manera:
1. Emisor:
No envío emisor y usuario separados con un ":" solo agrego el nombre de usuario. La información del emisor ya se proporciona con &issuer="..."
2. Secreto:
El secreto debe ser una cadena base32 (RFC 3548/4648). Básicamente, esto significa que se genera a partir de los siguientes caracteres: " ABCDEDFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz234567 "
Aquí hay una función para generar un secreto aleatorio según sea necesario:
generateRandomSecretTFA(length = 32) { let randomBytes = itf.generateRandomBytes(length); // function from node.js crypto module generating random bytes let rfc3548chars = 'ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghijklmnopqrstuvwxyz234567'; let secret = ''; for (let i = 0, l = randomBytes.length; i < l; i++) { secret += rfc3548chars[Math.floor(randomBytes[i] / 255.0 * (rfc3548chars.length - 1))]; } return secret; },3. Algoritmo:
Funcionó de mi parte durante algún tiempo enviándolo como lo hizo &algorithm=SHA-1 . Luego, de alguna manera no lo hará y tuve que enviarlo como &algorithm=SHA1 . Pero de todos modos, SHA-1/SHA1 es el algoritmo predeterminado que usa Google Authenticator, así que ya no lo envío de todos modos.
Ahora genero otpauth legibles de Google Authenticator como este:
otpauth://totp/test?secret=QePxfLm3PViiJvE2HCRNIsGxmdOJD5KP&issuer=Test&digits=6&period=30Comenté mis sugerencias a tu ejemplo:
otpauth://totp/TEST:asfadsf?secret=CBPhavYImNauHrVP9KuoR5eE2fO-b_7s&issuer=TEST&algorithm=SHA-1&digits=6&period=30 \__________/ \______________________________/ \_____________/ | | +----------> 3.) | +----------------------------------------------> 2.) +------------------------------------------------------------------------------> 1.)