Python中的google authenticator認(rèn)證過(guò)程
更新時(shí)間:2024年11月22日 15:14:24 作者:slp_44777680
文章介紹了使用Python 3.7生成Google Authenticator所需密鑰的步驟,包括使用pyotp模塊生成密鑰、生成二維碼圖片以及通過(guò)客戶端掃描二維碼進(jìn)行二次認(rèn)證的實(shí)現(xiàn)原理
Python的google authenticator認(rèn)證
環(huán)境描述
- python 3.7
- 所需安裝包 :
- pyotp qrcode Image
實(shí)現(xiàn)原理
- 使用pyotp 的python模塊生成google auth 需要的密鑰
- 根據(jù)密鑰生成條形碼圖片
- 使用google authenticator 客戶端掃描條形碼,客戶端根據(jù)時(shí)間及密鑰經(jīng)過(guò)算法 生成6位數(shù)的驗(yàn)證碼
- 平臺(tái)二次認(rèn)證通過(guò)對(duì)輸入的驗(yàn)證碼進(jìn)行校驗(yàn),校驗(yàn)也是基于時(shí)間和密鑰
代碼實(shí)現(xiàn)
#!/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): """ 根據(jù)用戶名及密鑰生成二維碼圖片 :param name:用戶名 :param issuer_name:發(fā)行人 :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()) # 驗(yàn)證 # res = google_auth_.verify_code_func(verify_code='635543') # print(res)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Django基于Models定制Admin后臺(tái)實(shí)現(xiàn)過(guò)程解析
這篇文章主要介紹了Django基于Models定制Admin后臺(tái)實(shí)現(xiàn)過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11python類別數(shù)據(jù)數(shù)字化LabelEncoder?VS?OneHotEncoder區(qū)別
這篇文章主要為大家介紹了機(jī)器學(xué)習(xí):數(shù)據(jù)預(yù)處理之將類別數(shù)據(jù)數(shù)字化的方法LabelEncoder?VS?OneHotEncoder區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09pandas pd.read_csv()函數(shù)中parse_dates()參數(shù)的用法說(shuō)明
這篇文章主要介紹了pandas pd.read_csv()函數(shù)中parse_dates()參數(shù)的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-03-03django基于cors解決跨域請(qǐng)求問(wèn)題詳解
這篇文章主要介紹了django基于cors解決跨域請(qǐng)求問(wèn)題詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Python圖像運(yùn)算之圖像點(diǎn)運(yùn)算與灰度化處理詳解
這篇文章主要介紹了圖像點(diǎn)運(yùn)算的灰度化處理的相關(guān)知識(shí),包括各種灰度算法的實(shí)現(xiàn),以及灰度線性變換和灰度非線性變換。需要的可以參考一下2022-02-02用PyInstaller把Python代碼打包成單個(gè)獨(dú)立的exe可執(zhí)行文件
這篇文章主要介紹了用PyInstaller把Python代碼打包成單個(gè)獨(dú)立的exe可執(zhí)行文件,需要的朋友可以參考下2018-05-05