2

我想编写一个 JavaScript 应用程序,例如 Authy 或 Google Authentificator。遗憾的是,我没有找到任何信息如何计算实际 PIN(一次性密码)的密钥以将其用于登录。

我知道,我必须将此密钥与实际时间戳一起使用,但不知道如何组合密钥和时间戳,然后生成 Google Authentificator 和 Authy 可以生成的 6 位 OTP。

如果我在 Google 中激活 2 因素身份验证,我会得到一个 QR 码,它会生成这样的链接

otpauth://totp/Google%3Asome.name%40googlemail.com?secret=x6wup537ptmmohbjkczluxit4r6eppfc&issuer=Google

所以x6wup537ptmmohbjkczluxit4r6eppfc是密钥。我必须怎么做才能从中获得 OTP,它实际上可以使用 Google 帐户登录?

最好的问候,谢谢,凯瑟基维

4

2 回答 2

1

我从搜索结果中提出了这个问题,因为我正在寻找一个可以解决(从标题中)提出的问题的库。经过更多搜索,我找到了一个可以做到这一点的 npm 模块 - https://www.npmjs.com/package/otplib。如果您查看演示,您会看到它给了您一个令牌。从该模块的文档中,您可以看到为了获取 pin,您可以使用:

const token = authenticator.generate(secret);

于 2019-04-25T15:24:51.260 回答
0

您可能想查看RFC-6238,它描述了基于时间的一次性密码算法。

于 2016-01-05T02:31:49.380 回答