TOTP
: Time-Based One-Time Password Algorithm(基于时间的一次性密码算法),具体可参考 RFC6238
使用诸如 TOTP 生成的动态口令可以实现登录时的二因子认证(密码+动态口令) ,关于双因子认证可以参考 这篇文章
本文简单阐述如何在自己的网站中集成双因子认证,服务端使用 python,客户端使用 Google Authenticator,在各个市场都可下载,无需联网即可使用
服务端
- 安装
pyotp
,pip install pyotp
- 为每个用户生成一个 base32 的密钥
base32secret3232
,保存在服务器数据库中 , 代码为pyotp.random_base32()
- 服务端在匹配时使用
totp = pyotp.TOTP('base32secret3232')
和
totp.now()
即可获得当前动态口令
客户端
客户端使用 Google Authenticator 扫描二维码即可录入信息,二维码的内容可以在服务器生成 pyotp.totp.TOTP('base32secret3232').provisioning_uri("alice@google.com", issuer_name="Secure App")
-
base32secret3232
为之前生成的 base32 的密钥 -
alice@google.com
为用户的用户名,可以显示在客户端上 -
Secure App
为 APP/网站 的名字
之后 Google Authenticator 会每隔 30s 就更新一次动态口令,在需要二次认证的时候传入服务器做对比。二维码生成工具有很多,比如 qrious 等
参考资料: