基於Django的雙因子認證實現
*本文作者:chengfangang,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載
雙因子簡介
對於網路信息系統來說,能否識別使用者的身份,是能否確保安全的基礎和關鍵。在實際應用中,許多網路信息系統都會要求使用者在使用系統之前,提供一些相關信息用以實現對使用者的身份認證。雙因子身份認證技術彌補了傳統密碼認證方法的很多弊端。 可用於認證的因子可有三種:第一種因子最常見的就是口令等知識,第二種因子比如說是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應用禁止截屏),大概就是長這個樣子, 右上角 + 添加識別的二維碼
*本文作者:chengfangang,本文屬 FreeBuf 原創獎勵計劃,未經許可禁止轉載


※警惕出現下一個「WannaCry」,安天發布CVE-2017-11780漏洞免疫工具
※Windows下SLmail郵件伺服器緩衝區溢出理解及實驗
※一次誤報引發的DNS檢測方案的思考:DNS隧道檢測平民解決方案
TAG:FreeBuf |