温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python如何实现双因素验证2FA

发布时间:2022-07-08 13:55:42 来源:亿速云 阅读:240 作者:iii 栏目:开发技术

这篇“Python如何实现双因素验证2FA”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python如何实现双因素验证2FA”文章吧。

1.安装

pip 安装,不多说。

pip install pyotp

2.配对

配对就是移动设备和我们的 web 服务器配对。

首先,在服务器上使用如下代码生成一次性密钥:

>>> import pyotp
>>> pyotp.random_base32()
'BZ4TOJD4JWWJWPQBKP23FA55EMHA25Y2'
>>>

然后将这个密钥以二维码的形式让手机(移动设备)扫描,扫描之后,手机上的应用就保存了这个密钥。

3.验证

接下来,在手机上就可以使用下面这段逻辑产生动态密码了。

>>> totp = pyotp.TOTP('BZ4TOJD4JWWJWPQBKP23FA55EMHA25Y2')
>>> totp.now()
'941782'
>>>

现在,你有 30 秒的时间将这个 6 位数密码提交到服务器(输入到网页上),服务器服务器也使用同样的密钥和当前时间戳,生成一个动态码,跟用户提交的动态码比对。只要两者不一致,就验证失败,也就是下面这段逻辑,如果超过 30 秒,(当然,30 秒可以自定义),也会失效:

>>> totp = pyotp.TOTP('BZ4TOJD4JWWJWPQBKP23FA55EMHA25Y2')
>>> totp.verify('941782')
True
>>> time.sleep(30)
>>> totp.verify('941782')
False

除了使用基于时间的动态密码,也可以用基于计数的动态密码,逻辑如下:

hotp = pyotp.HOTP('base32secret3232')
hotp.at(0) # => '260182'
hotp.at(1) # => '055283'
hotp.at(1401) # => '316439'

# OTP verified with a counter
hotp.verify('316439', 1401) # => True
hotp.verify('316439', 1402) # => False

4.那是不是手机上还有开发个 app

不用,我们直接使用现成的 Google Authenticator 就可以了。

如果你已安装了 Google Authenticator,请点击 :heavy_plus_sign: 添加密钥,然后扫描下发的二维码,就可以生成动态码:

Python如何实现双因素验证2FA

然后你可以执行下面这段代码,就可以发现 pyotp 产生的动态码和 Google Authenticator 产生的是一致的:

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

其实二维码的信息就是 JBSWY3DPEHPK3PXP。

这样,我们用 Google Authenticator 来产生动态密码,网站上进行二次验证,就可以实现 2FA 了。

以上就是关于“Python如何实现双因素验证2FA”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI