1

当我发现PyOtp时,我正在寻找基于 Python 时间的 OTP 库。我扫描了样本二维码

在此处输入图像描述

使用 Google Authenticator 并运行相关的示例代码

import pyotp
totp = pyotp.TOTP("JBSWY3DPEHPK3PXP")
print("Current OTP:", totp.now())

但是,我手机上的代码与应用程序生成的代码不匹配。我还尝试了另一个库(SpookyOTP),代码也不匹配。使用 PyOTP 生成我自己的密钥,而不是使用示例密钥,也没有使其工作。

显然我做错了什么。我唯一想到的是这两个设备(我的电脑和我的手机)不知何故没有使用相同的时间戳来生成代码。但是两个设备在时钟上显示相同的时间。

4

1 回答 1

4

这些代码是基于时间的 - 您是否在设备上的 Google Authenticator 应用程序上扫描它们?

您必须确保手机和服务器(托管脚本的位置)上的时间同步。

要同步 Google Authenticator 应用程序:

我的 Google Authenticator 代码不起作用 (Android) 这可能是因为您的 Google Authenticator 应用程序上的时间未正确同步。

确保您的时间正确: https ://support.google.com/accounts/answer/185834?hl=en

转到 Google Authenticator 应用程序的主菜单,点击更多,然后点击设置。点击代码的时间校正 点击立即同步 在下一个屏幕上,应用程序将确认时间已同步,您现在应该可以使用验证码登录了。同步只会影响您 Google 的内部时间Authenticator 应用程序,并且不会更改您设备的日期和时间设置。

要同步您的服务器,您需要使用 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
于 2017-11-04T05:59:14.700 回答