专栏首页FreeBuf基于Django的双因子认证实现

基于Django的双因子认证实现

双因子简介

对于网络信息系统来说,能否识别使用者的身份,是能否确保安全的基础和关键。在实际应用中,许多网络信息系统都会要求使用者在使用系统之前,提供一些相关信息用以实现对使用者的身份认证。双因子身份认证技术弥补了传统密码认证方法的很多弊端。 可用于认证的因子可有三种:第一种因子最常见的就是口令等知识,第二种因子比如说是IC卡、令牌,USB Key等实物,第三种因子是指人的生物特征。所谓双因子认证就是必须使用上述三种认证因子的任意两者的组合才能通过认证的认证方法。

双因子认证(2FA)是指结合密码以及实物(信用卡、SMS手机、令牌或指纹等生物标志)两种条件对用户进行认证的方法。

OTP全称叫One-time Password,也称动态口令,是根据专门的算法每隔60秒生成一个与时间相关的、不可预测的随机数字组合,每个口令只能使用一次。这里使用OTP作为django的双因子认证。

双因子的django实现

① 引入django的双因子模块。参考模块的地址:https://pypi.python.org/pypi/django-otp/ 其中 https://django-otp-official.readthedocs.io/ 介绍了详细的模块使用方法。

实际使用中可以使用 pip install django_otp 安装(要求django版本>=1.8)

② 修改settings.py 文件 。引入django_otp的模块,其中注意 MIDDLEWARE 中django_otp.middleware.OTPMiddleware 中间件的位置。然后执行 python manage.py migrate otp_totp 生成对应的表

③ 在需要支持otp认证的代码逻辑处引入django_otp的接口。

此处的逻辑(这里使用了django的登陆模块)是在用户登录时,需要将用户名和otp的口令连接在一起使用。

首先将django_otp的模块import进来,然后再从password中提取出otp的口令,在经过django的认证之后,再进行口令的校验(match_token), 如果otp认证成功, 则login成功,否则失败。

④ 激活用户的otp客户端

首先,要将用户引入到otp认证中。 登陆django的admin管理后台,将用户添加到otp相关的表中。中间省略了ADD TOTP DEVICE。

需要执行 pip install qrcode 支持生成二维码

然后会在otp表中生成用户客户端的二维码,使用户的otp工具(测试使用的是 FreeOTP)识别这个二维码后,即可激活otp功能。在登陆输入密码时,需要将密码+otp工具的口令一起输入即可

附一张FreeOTP 图片(手机Freeotp应用禁止截屏),大概就是长这个样子, 右上角 + 添加识别的二维码

本文分享自微信公众号 - FreeBuf(freebuf),作者:chengfangang

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-10-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 某企业授权渗透报告

    目标公司是隶属于粤港澳类型在香港上市的一家普通能源公司,这里初期的信息收集适用天眼查/小蓝本企业查,我这里使用的是小蓝本企业查(免费)。

    FB客服
  • 一次安全测试引发的对Django框架文件上传安全机制的初步分析

    我司的堡垒机是基于jumpserver 0.3版本进行二次开发,进行了大量的重构和新功能的添加,基本满足了公司安全运维的需求。在对文件上传接口进行安全审计的时候...

    FB客服
  • VM真的比Container更安全吗?

    理论上来说,是的。但在工作实践中,那可就不一定了。 ? 写在前面的话 我们经常会说,“HTTPS是安全的”或者“HTTP是不安全的”。但其实我们想表达的是,“H...

    FB客服
  • 请给出一个SpringMVC的表单提交的例子和session运用的例子

    2.表单提交和session 像学servlet那时一样,继hello world的例子以后,紧接着我们就要学习表单提交和session。 例2.1 <%@...

    马克java社区
  • [035] onStop提前投放问题

    最近遇到一个奇葩的问题,应用X的Activity1中点击一个Button跳转到Activity2,手机A比手机B上快500ms左右,虽然手机A比手机B的配置高,...

    王小二
  • Android 系统架构和应用组件那些事

    继上一期浅谈了Android的前世今生,这一期一起来大致回顾一下Android 系统架构和应用组件。 Android 系统架构 Android系...

    分享达人秀
  • python爬虫实例之获取动漫截图

    之前有些无聊(呆在家里实在玩的腻了),然后就去B站看了一些python爬虫视频,没有进行基础的理论学习,也就是直接开始实战,感觉跟背公式一样的进行爬虫,也算行吧...

    砸漏
  • Django import export实现数据库导入导出方式

    使用django-import-export库,导入导出数据,支持csv、xls、json、html等格式

    砸漏
  • SQL命令

    MYSql在表(table_name)的指定位置(exist_field_name之后)添加字段(字段名,类型(长度): new_field_name,type...

    用户1396155
  • Android 系统架构

    Android 系统架构分为五层 从上到下依次为应用层、应用框架层、系统运行库层、硬件抽象层与Linux内核层。

    Yif

扫码关注云+社区

领取腾讯云代金券