python 实现google authenticator 认证

一、环境描述

windows开发环境
python:3.6
所需安装包
pyotp qrcode   Image

二、实现原理

1.使用pyotp 的python模块生成google auth 需要的密钥
2.根据密钥生成条形码图片
3.使用google authenticator 客户端扫描条形码,客户端根据时间及密钥经过算法
生成6位数的验证码
4.平台二次认证通过对输入的验证码进行校验,校验也是基于时间和密钥

三、代码实现

3.1随机密钥生成

a. 安装模块包

安装模块包 pyotp
pip install pyotp

b. 密钥生成

import pyotp
gtoken = pyotp.random_base32(64) #获取随机密钥,存于用户表中,随机64位

3.2 图片二维码生成

a. 安装模块包

安装模块包
pip install qrcode
qrcode 依赖 Image 这个包:

pip install Image

b.根据用户名及密钥生成二维码

按 Ctrl+C 复制代码

按 Ctrl+C 复制代码

c. 使用功能

result = get_qrcode(gtoken, 'supery')
print('result', result)
LWGOAZX5PQQLR34BOJRLVHHC4CRVFVXP3PGCYHWZ2PVKLRSJNCDWR6XPL4LAJRST
filepath D:\dev\PYSCRIPTS\xxx\mfa\static\image\LWGOAZX5PQQLR34BOJRLVHHC4CRVFVXP3PGCYHWZ2PVKLRSJNCDWR6XPL4LAJRST.png
result True

3.3 效验验证码正确性

a. 下载好google authenticator客户端

客户扫描图片,首页验证用户名和密码后,显示对应的条码图片。<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>The customer scans the picture, and after the front page verifies the user name and password, the corresponding barcode picture is displayed.</font>*</details>

windows上打开图片后扫描二维码
D:\dev\PYSCRIPTS\xxx\mfa\static\image\LWGOAZX5PQQLR34BOJRLVHHC4CRVFVXP3PGCYHWZ2PVKLRSJNCDWR6XPL4LAJRST.png
实际生产环境直接在页面上显示二维码图片并进行扫描。<details><summary>*<font color='gray'>[En]</font>*</summary>*<font color='gray'>The actual production environment directly displays the QR code picture on the page and scans it.</font>*</details>

b. 效验代码

import pyotp

def Google_Verify_Result(secret_key, verifycode):
    t = pyotp.TOTP(secret_key)

    result = t.verify(verifycode)  # 对输入验证码进行校验,正确返回True
    msg = result if result is True else False
    return msg

c. 使用功能

secret_key = 'LWGOAZX5PQQLR34BOJRLVHHC4CRVFVXP3PGCYHWZ2PVKLRSJNCDWR6XPL4LAJRST'

res = Google_Verify_Result(secret_key, 247724)
print('res', res)res False

Original: https://www.cnblogs.com/wangkun122/p/12582921.html
Author: 王大拿
Title: python 实现google authenticator 认证

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/7881/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部