当我找到PyOtp时,我正在寻找基于Python时间的OTP库。我扫描了样本QR码
使用Google身份验证器并运行相关的示例代码
import pyotp
totp = pyotp.TOTP("JBSWY3DPEHPK3PXP")
print("Current OTP:", totp.now())
但是,我的手机上的代码和应用程序生成的代码不匹配。我还尝试了另一个库(SpookyOTP),但代码也不匹配。使用PyOTP生成我自己的密钥,而不是使用样本密钥,也没有使它工作。
显然我做错了什么。我想到的唯一一件事就是这两个设备(我的电脑和我的电话)在某种程度上没有使用相同的时间戳来生成代码。但是这两种设备在时钟上显示相同的时间。
答案 0 :(得分:1)
这些代码是基于时间的 - 您是否在设备上的Google身份验证器应用中扫描它们?
您必须确保手机和服务器(托管脚本的位置)上的时间已同步。
同步Google身份验证器应用:
我的Google身份验证器代码无效(Android) 这可能是因为您的Google身份验证器应用上的时间未正确同步。
确保您拥有正确的时间: https://support.google.com/accounts/answer/185834?hl=en
转到Google身份验证器应用上的主菜单点按“更多”,然后点按 设置。点按代码的时间校正点按立即同步下一步 屏幕,应用程序将确认时间已同步,并且您 现在应该可以使用您的验证码登录。同步 只会影响您的Google身份验证器应用的内部时间, 并且不会更改您设备的日期和时间时间设置。
要同步您的服务器,您需要使用NTP进行同步(我假设Ubuntu,但它与其他操作系统类似):
https://www.digitalocean.com/community/tutorials/how-to-set-up-time-synchronization-on-ubuntu-16-04
安装 要安装ntpd,请在终端提示符下输入:
sudo apt install ntp
配置 编辑/etc/ntp.conf以添加/删除服务器行。默认情况下,这些服务器已配置:
# Use servers from the NTP Pool Project. Approved by Ubuntu Technical Board
# on 2011-02-08 (LP: #104525). See http://www.pool.ntp.org/join.html for
# more information.
server 0.ubuntu.pool.ntp.org
server 1.ubuntu.pool.ntp.org
server 2.ubuntu.pool.ntp.org
server 3.ubuntu.pool.ntp.org
更改配置文件后,您必须重新加载ntpd:
sudo systemctl reload ntp.service