【问题标题】:Scanning QR Code does not work with Google Autneticator on IOS扫描二维码不适用于 IOS 上的 Google Authenticator
【发布时间】:2021-10-19 09:30:10
【问题描述】:

我正在创建这个二维码 URL:

otpauth://totp/TEST:asfadsf?secret=CBPhavYImNauHrVP9KuoR5eE2fO-b_7s&issuer=TEST&algorithm=SHA-1&digits=6&period=30

如果我在 ios 上使用 google 身份验证器扫描此代码,我会收到以下消息:

“代码不是有效的身份验证令牌”

我的二维码有什么问题吗?

【问题讨论】:

    标签: javascript ios qr-code google-authenticator


    【解决方案1】:

    我遇到了类似的问题,并按如下方式进行了修复:

    1.发行人:

    我不发送以“:”分隔的发行者和用户,我只添加用户名。发行者信息已通过 &issuer="..."

    提供

    2。秘密:

    密钥必须是 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 可读 otpauth:

    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.)
    
    

    【讨论】:

    • 哇,答案真好,2 号正是我所需要的。如果我使用你的秘密生成函数它正在工作。我的函数生成了一个包含 0、1、8 和 9 的字符串,所以它不是 base32(RFC 3548/4648)。谢谢,干得好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    相关资源
    最近更新 更多