我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python实现双因素验证2FA的示例代码

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python实现双因素验证2FA的示例代码

介绍

传统的用户名密码方式,容易泄漏,并不安全。

你说,加上短信验证码不就安全了,其实短信验证码也是不安全的,容易被拦截和伪造,SIM 卡也可以克隆,已经有案例,先伪造身份证,再申请一模一样的手机号码,把钱转走。

因此就有了 Two-factor authentication,简称 2FA,也就是双因素验证。最常见的就是用户名密码,再加一个动态码。动态码通常由随身携带的移动设备上生成,比如 U 盾、手机。

动态码最常见的实现算法就是 One-Time Password(OTP),是基于时间的一次性密码,它是公认的可靠解决方案,已经写入国际标准 RFC6238。比如我们最常用的 Google Authenticator,就是 OTP。

那么,知道了 2FA,接下来应该考虑的事,就是如何让你用 Python 写的网站实现 2FA。

轮子其实已经有了,那就是 PyOTP,结合自己的理解,分享一下它的用法。

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: 添加密钥,然后扫描下发的二维码,就可以生成动态码:

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

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

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

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

知识点补充

双因素认证的含义及工作原理

双因素认证是-种账号验证过程,顾名思义,除用户名和密码之外还需要第二因素核验用户的登录凭证。第二因素很难被网络不法分子复制,例如个人安全问题戏发送到个人安全设备上的动态密码。

双因索认证的步骤根据所选验证因素略有不同,比如设置成个人安全问题可能要回答母亲的婚前姓氏,或儿时居住的街道名称等,设置成动态密码就需要在登录界面输入发送到用户移动设备上的临时登录密码。但无论设置哪种第二因素,都要求用户在输入用户名和密码后提供额外的安全提示。

对于最高级别的访问管理,大多数双因素认证工具会要求用户每次登录都出示安全提示。

双因素认证在身份和访问管理中的作用

身份和访问管理(IAM) 是企业用来控制对IT资源和设备的访问权限及访问许可级别的总体策略。多因素认证(MFA) 也属于IAM,但双因索认证本身并不是完整的IAM安全解决方案。比起IAM策略,双因索认证更像为补充完整解决方案的最终安全层。

双因素认证的使用场景

简单来说,双因索认证用于保护业务系统账号,否则业务系统很容易遭遇账号接管攻击。最终导致大规模的数据泄露。

到此这篇关于Python实现双因素验证2FA的示例代码的文章就介绍到这了,更多相关Python双因素验证2FA内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python实现双因素验证2FA的示例代码

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

Python实现身份证号码验证的示例代码

本文介绍了使用Python验证身份证号码的示例代码。代码通过正则表达式匹配格式,计算校验位,并验证校验位来实现验证。利用正则表达式简化了格式验证,并使用列表存储权重和校验位值,便于扩展和维护。此代码适用于Python3.6或更高版本,需定期更新以适应格式变化。
Python实现身份证号码验证的示例代码
2024-04-02

python django 实现验证码的功能实例代码

我也是刚学Python Django不久很多都不懂,所以我现在想一边学习一边记录下来然后大家一起讨论! 验证码功能一开始我在网上找了很多的demo但是我在模仿他们写的时候,发现在我的版本上根本就不能运行起来在前端页面显示的时候是图裂,有可
2022-06-04

python实现三次密码验证的示例

需求:Python实现三次密码验证,每次验证结果需要提示,三次验证不通过需要单独提示 代码如下:user = '张无忌' password = '12345678' confirm_flag = Truefor i in range(0,
2022-06-02

C#实现身份证验证功能的示例代码

这篇文章主要为大家详细介绍了如何利用C#实现身份证验证功能,文中的示例代码讲解详细,对我们学习C#有一定的帮助,感兴趣的小伙伴可以跟随小编一起了解一下
2022-12-20

Redis实现短信验证码登录的示例代码

目录效果图pom.xmlapplicatoin.ymlRedis配置类controllerserviceImplmapper效果图发送验证码输入手机号、密码以及验证码完成登录操作pom.xml核心依赖
2022-06-13

JavaScript实现登录拼图验证的示例代码

这篇文章主要为大家详细介绍了如何利用JavaScript实现登录拼图验证的功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
2023-01-11

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录