在临时/生产环境中,双因素身份验证代码不匹配

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在临时/生产环境中,双因素身份验证代码不匹配相关的知识,希望对你有一定的参考价值。

我在Rails4应用程序中设置了双因素身份验证。在我的开发环境中一切正常,但在Staging环境中失败了。我的暂存环境是运行nginx Web服务器的Ubuntu 14.04 LTS。我已经安装了ImageMagick 6.7.7-10。虽然我的开发环境是macOS High Sierra,但我安装了ImageMagick 7.0.6-7并运行了THIN Web服务器。

RubyGems的:

gem 'devise', '~> 3.5', '>= 3.5.2'
gem 'devise-two-factor', '~> 2.2', '>= 2.2.1'
gem 'rqrcode-rails3', '~> 0.1.7'
gem 'mini_magick', '~> 4.5'

QRCode在Staging上呈现,但它看起来与Development不同。我不确定这是不是一个案例。还有一件事是,可以通过Google身份验证器应用程序扫描QRCode,但是当我验证代码时,它失败了。在Staging中,我在rails控制台中检查了user.current_otp,它与我扫描的代码永远不匹配。但在开发中,我扫描QRCode,我得到匹配代码,因为我在我的rails控制台中执行user.current_otp

我将QRCode渲染为svg图像。

<%= raw RQRCode::render_qrcode(current_user.otp_provisioning_uri(current_user.email, issuer: "2FA App"), :svg, level: :l, unit: 2) %>

如果您愿意,我将非常感谢您的帮助并提供更多详细信息。

答案

如上面的评论中所述,您需要设置NTP操作临时服务器并同步时间以及可能在手机上的Google身份验证器应用中同步时间:

在Ubuntu上安装NTP:

禁用timesyncd:

sudo timedatectl set-ntp no

验证是否已禁用timesyncd:

timedatectl

安装ntpd:

sudo apt-get install ntp

检查ntpd是否正在运行:

sudo ntpq -p

检查日期和时间:

date

比较分钟和秒与一些网站链接:https://www.timeanddate.com/

android / ios上的同步时间Google身份验证器应用:

https://support.google.com/accounts/answer/185834?hl=en

滚动到最底部分:“我的Google身份验证器代码无效(Android)”

以上是关于在临时/生产环境中,双因素身份验证代码不匹配的主要内容,如果未能解决你的问题,请参考以下文章

两因素 Google 身份验证与服务器上的代码不匹配 - ASP.Net MVC

gitlab的无效双因素代码

.Net Core 中的两因素身份验证 - 如何验证令牌

Reddit系统被黑:基于短信验证码的双因素认证并不安全

GitHub 要求所有账户开启双因素身份验证

ASP.Net Identity 2 使用 SMS 密码登录 - 不使用双因素身份验证