Python中的google authenticator认证过程

 更新时间:2024年11月22日 15:14:24   作者:slp_44777680  
文章介绍了使用Python 3.7生成Google Authenticator所需密钥的步骤,包括使用pyotp模块生成密钥、生成二维码图片以及通过客户端扫描二维码进行二次认证的实现原理

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)

总结

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

相关文章

  • Python中Subprocess的不同函数解析

    Python中Subprocess的不同函数解析

    这篇文章主要介绍了Python中Subprocess的不同函数解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • 解决python明明pip安装成功却找不到包的问题

    解决python明明pip安装成功却找不到包的问题

    今天小编就为大家分享一篇解决python明明pip安装成功却找不到包的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • PyTorch 随机数生成占用 CPU 过高的解决方法

    PyTorch 随机数生成占用 CPU 过高的解决方法

    今天小编就为大家分享一篇PyTorch 随机数生成占用 CPU 过高的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-01-01
  • python dict乱码如何解决

    python dict乱码如何解决

    在本篇文章里小编给大家分享了关于python dict乱码解决方法,需要的朋友们可以参考下。
    2020-06-06
  • PyQt5实现登录页面

    PyQt5实现登录页面

    这篇文章主要为大家详细介绍了PyQt5实现登录页面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • Python GIL(全局解释器锁)的使用小结

    Python GIL(全局解释器锁)的使用小结

    本文主要介绍了Python GIL(全局解释器锁)的使用小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-11-11
  • PyMongo安装使用笔记

    PyMongo安装使用笔记

    这篇文章主要介绍了PyMongo安装使用笔记,本文讲解使用pip方式安装PyMongo,并给出一个pymongo的简单使用代码实例,需要的朋友可以参考下
    2015-04-04
  • Python的Flask框架中@app.route的用法教程

    Python的Flask框架中@app.route的用法教程

    这篇文章主要介绍了Python的Flask框架中@app.route的用法教程,包括相关的正则表达式讲解,是Flask学习过程当中的基础知识,需要的朋友可以参考下
    2015-03-03
  • Python基于WordCloud制作词云图

    Python基于WordCloud制作词云图

    这篇文章主要介绍了python基于WordCloud制作词云图,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Python使用Bokeh库实现炫目的交互可视化

    Python使用Bokeh库实现炫目的交互可视化

    Bokeh是一个用于创建交互式可视化图形的强大Python库,它不仅易于使用,而且功能强大,适用于各种数据可视化需求,本文将介绍Bokeh库的绘图可视化基础入门,需要的可以了解下
    2024-03-03

最新评论