您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Python中的google authenticator认证过程

51自学网 2025-02-05 12:14:31
  python
这篇教程Python中的google authenticator认证过程写得很实用,希望能帮到您。

Python的google authenticator认证

环境描述

  • python 3.7
  • 所需安装包 :
  • pyotp qrcode Image

实现原理

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

代码实现

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Author : SLP# @Time : 2021/10/3 10:25import osimport tracebackimport pyotpfrom qrcode import QRCode, constantsclass GoogleAuthenticatorClient:    def __init__(self, secret_key=None):        self.secret_key = secret_key    def create_secret(self):        """        生成google auth 需要的密钥        :return:        """        self.secret_key = pyotp.random_base32(64)        return self.secret_key    def create_secret_qrcode(self, name=None, issuer_name=None, save_to_file=True):        """        根据用户名及密钥生成二维码图片        :param name:用户名        :param issuer_name:发行人        :param save_to_file: 保存至文件        :return:        """        data = pyotp.totp.TOTP(self.secret_key).provisioning_uri(name=name, issuer_name=issuer_name)        qr = QRCode(            version=1,            error_correction=constants.ERROR_CORRECT_L,            box_size=6,            border=4, )        try:            qr.add_data(data)            qr.make(fit=True)            img = qr.make_image()            if save_to_file:                base_dir = os.path.dirname(os.path.abspath(__file__))                dir_path = os.path.join(base_dir, 'static', 'image')                if not os.path.exists(dir_path):                    os.makedirs(dir_path)                filepath = dir_path + os.sep + self.secret_key + '.png'                img.save(filepath)  # 保存条形码图片                return True, filepath            else:                return img.get_image()        except Exception as e:            traceback.print_exc()            return False, None    def verify_code_func(self, verify_code):        t = pyotp.TOTP(self.secret_key)        result = t.verify(verify_code)        return resultif __name__ == '__main__':    secret_key = 'PU6PY6FWPVQ4BXE7ZP6X7YMVM3BH3ODS7SW53GL3LJPED7AAQUVF2EKP6AGNFFOX'    google_auth_ = GoogleAuthenticatorClient(secret_key=secret_key)    # secret = google_auth_.create_secret()    # print('秘钥', secret)    # # 生成图片二维码    image = google_auth_.create_secret_qrcode(name='slp', issuer_name='GoldBull', save_to_file=False)    print(image.show())    # 验证    # res = google_auth_.verify_code_func(verify_code='635543')    # print(res)

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。


Python使用WebSocket和SSE实现HTTP服务器消息推送方式
python request不走代理proxy方式
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。