0

我的 nodeJS 服务器应用程序中有一个 2FA 代码,它利用 speakeasy 模块来验证传递的密钥是否有效。我在客户端使用 google Authenticator 应用程序。我正在使用密钥 =“A0B0C0D0E0F0A1B1C1D1E1F2”。这适用于 Android 设备。但是,当我在 Iphone 上尝试相同的操作时,我会遇到以下问题:

  1. Iphone 上的 Google Authenticator 应用程序不允许我添加秘密“A0B0C0D0E0F0A1B1C1D1E1F2”。似乎它有一些关于密钥的本机规则。
  2. 即使我输入了 Iphone 允许的密钥,speakeasy.totp 代码也无法验证,并且总是返回 FALSE。
  secretKey = "A0B0C0D0E0F0A1B1C1D1E1F2";
  var verified = speakeasy.totp.verify({
    secret: secretKey,
    encoding: 'base32',
    token: userToken
  }); 

if(!verified) {
         // verification failed
    } else {
         // verification ok
    }

如何解决此问题以使其在 Android 和 Iphone 设备上都可以使用?

注意:该应用程序仍在测试区域中。prod 中的密钥将存储在永久存储/数据库中。

谢谢。

4

1 回答 1

0

totp.verify 中使用的秘密是小写的。当我将其转换为大写时,它开始正常工作。

于 2019-10-18T11:24:28.640 回答