为什么 Google Authenticator 和 Duo 产生不同的验证码?

Why do Google Authenticator and Duo produce different authentication codes?

我正在使用以下库来实现双因素身份验证:

https://github.com/speakeasyjs/speakeasy

图书馆生成以下二维码:

当我扫描 Google Authenticator 和 Duo 中的代码时,两个应用程序都会生成不同的令牌。

speakeasy 库仅将 Google 身份验证器令牌识别为有效。

为什么同一个二维码在两个不同的应用中产生不同的令牌?

我没有研究 Speakeasy 及其工作原理,但查看 QR 码和它编码的 URL 可以说明一些事情。 URL 中的算法说它是 SHA256,但我相信 Google Authenticator only supports SHA1 作为算法。所以,有可能 URL 在说一套,而应用在做另一套。

奇怪的是 Authenticator 正在工作而 Duo 没有,而我假设这种情况正好相反。

此外,Google 身份验证器希望秘密以 base32 编码。我没有用过 Duo,但也许这也造成了困难。

抱歉,这不是一个很好的答案,但它可能会给你一些方向来测试正在发生的事情。