如何将 otpauth 密钥转换为 JavaScript 中的 otp 密码?

How to convert a otpauth secret key to an otp pin in JavaScript?

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

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

如果我在 Google 中激活 2 因素身份验证,我会得到一个 QR 码,它会导致 link 像这样

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

所以x6wup537ptmmohbjkczluxit4r6eppfc就是秘钥。我必须做什么才能从中获得一个 OTP,它实际上可以与 Google 帐户一起登录?

致以最诚挚的问候,谢谢, 凯撒猕猴桃

您可能想查看 RFC-6238,它描述了 Time-Based One-Time 密码算法。

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

const token = authenticator.generate(secret);