我正在创建这个qr码URL:
otpauth://totp/TEST:asfadsf?secret=CBPhavYImNauHrVP9KuoR5eE2fO-b_7s&issuer=TEST&algorithm=SHA-1&digits=6&period=30
如果我在ios上使用google authenticator扫描此代码,我将得到消息:
"代码不是有效的身份验证令牌">
我的二维码有问题吗?
我有类似的问题,并像下面这样修复它们:
1。发行人:
我不发送发行者和用户与":"我只添加了用户名。发行人信息已经提供了&issuer="…">
2。秘密:
secret需要是一个base32 (RFC 3548/4648)字符串。这基本上意味着由以下字符生成:">ABCDEDFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz234567">
下面是一个根据需要生成随机秘密的函数:
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。算法:
它在我这边工作了一段时间,像你一样发送它&algorithm=SHA-1。然后不知何故,它不会,我不得不发送它像&algorithm=SHA1。但无论如何,SHA-1/SHA1是Google Authenticator使用的默认算法所以我不再发送它了
我现在生成Google Authenticator可读的otpath,就像这样:
otpauth://totp/test?secret=QePxfLm3PViiJvE2HCRNIsGxmdOJD5KP&issuer=Test&digits=6&period=30
我把我的建议评论到你的例子:
otpauth://totp/TEST:asfadsf?secret=CBPhavYImNauHrVP9KuoR5eE2fO-b_7s&issuer=TEST&algorithm=SHA-1&digits=6&period=30
__________/ ______________________________/ _____________/
| | +----------> 3.)
| +----------------------------------------------> 2.)
+------------------------------------------------------------------------------> 1.)