Python中的google authenticator认证过程
|
Python的google authenticator认证
环境描述
- python 3.7
- 所需安装包 :
- pyotp qrcode Image
实现原理
- 使用pyotp 的python模块生成google auth 需要的密钥
- 根据密钥生成条形码图片
- 使用google authenticator 客户端扫描条形码,客户端根据时间及密钥经过算法 生成6位数的验证码
- 平台二次认证通过对输入的验证码进行校验,校验也是基于时间和密钥
代码实现
- #!/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)
复制代码 总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
来源:https://www.jb51.net/python/331227sfi.htm
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作! |
|
|
|
发表于 2024-11-25 07:37:47
举报
回复
分享
|
|
|
|