当前位置: 代码网 > it编程>前端脚本>Python > Python中的google authenticator认证过程

Python中的google authenticator认证过程

2024年11月25日 Python 我要评论
python的google authenticator认证环境描述python 3.7所需安装包 :pyotp qrcode image实现原理使用pyotp 的python模块生成google au

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:25

import os
import traceback
import pyotp
from qrcode import qrcode, constants


class 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 result


if __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)

总结

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

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com