python 产生token及token验证的方法


Posted in Python onDecember 26, 2018

1、前言

最近在做微信公众号开发在进行网页授权时,微信需要用户自己在授权url中带上一个类似token的state的参数,以防止跨站攻击。

在经过再三思考之后,自己试着实现一个产生token和验证token的方案。接下就把code贴出来。希望读者指导一下。

2、产生token

原理:

通过hmac sha1 算法产生用户给定的key和token的最大过期时间戳的一个消息摘要,将这个消息摘要和最大过期时间戳通过":"拼接起来,再进行base64编码,生成最终的token

实现:

import time
import base64
import hmac

def generate_token(key, expire=3600):
 r'''
 @Args:
  key: str (用户给定的key,需要用户保存以便之后验证token,每次产生token时的key 都可以是同一个key)
  expire: int(最大有效时间,单位为s)
 @Return:
  state: str
 '''
 ts_str = str(time.time() + expire)
 ts_byte = ts_str.encode("utf-8")
 sha1_tshexstr = hmac.new(key.encode("utf-8"),ts_byte,'sha1').hexdigest() 
 token = ts_str+':'+sha1_tshexstr
 b64_token = base64.urlsafe_b64encode(token.encode("utf-8"))
 return b64_token.decode("utf-8")

3、验证token

原理:

将token进行base64解码,通过token得到token最大过期时间戳和消息摘要。判断token是否过期。

如没过期才将 从token中的取得最大过期时间戳进行hmac sha1 算法运算(注意这里的key要与产生token的key要相同),最后将产生的摘要与通过token取得消息摘要进行对比, 如果两个摘要相等,则token有效,否则token无效 。

实现:

import time
import base64
import hmac

def certify_token(key, token):
 r'''
 @Args:
  key: str
  token: str
 @Returns:
  boolean
 '''
 token_str = base64.urlsafe_b64decode(state).decode('utf-8')
 token_list = token_str.split(':')
 if len(token_list) != 2:
 return False
 ts_str = token_list[0]
 if float(ts_str) < time.time():
 # token expired
 return False
 known_sha1_tsstr = token_list[1]
 sha1 = hmac.new(key.encode("utf-8"),ts_str.encode('utf-8'),'sha1')
 calc_sha1_tsstr = sha1.hexdigest()
 if calc_sha1_tsstr != known_sha1_tsstr:
 # token certification failed
 return False 
 # token certification success
 return True

4、用法

key = "JD98Dskw=23njQndW9D"
# 一小时后过期
token = generate_token(key, 3600)

certify_token(key, token)

5、Note!!!

本代码只能在python3.x 中运行。

以上这篇python 产生token及token验证的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python正则表达式的使用范例详解
Aug 08 Python
举例详解Python中yield生成器的用法
Aug 05 Python
Python操作使用MySQL数据库的实例代码
May 25 Python
Numpy array数据的增、删、改、查实例
Jun 04 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
Jul 19 Python
PyQt打开保存对话框的方法和使用详解
Feb 27 Python
解决.ui文件生成的.py文件运行不出现界面的方法
Jun 19 Python
使用pandas实现连续数据的离散化处理方式(分箱操作)
Nov 22 Python
Python3 Click模块的使用方法详解
Feb 12 Python
Python 执行矩阵与线性代数运算
Aug 01 Python
python 实现两个变量值进行交换的n种操作
Jun 02 Python
7个关于Python的经典基础案例
Nov 07 Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 #Python
Python图像处理之直线和曲线的拟合与绘制【curve_fit()应用】
Dec 26 #Python
python处理multipart/form-data的请求方法
Dec 26 #Python
Python实现的简单线性回归算法实例分析
Dec 26 #Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
Dec 26 #Python
python使用knn实现特征向量分类
Dec 26 #Python
python调用staf自动化框架的方法
Dec 26 #Python
You might like
深入PHP变量存储的详解
2013/06/13 PHP
php使用ffmpeg获取视频信息并截图的实现方法
2016/05/03 PHP
jQuery 学习第七课 扩展jQuery的功能 插件开发
2010/05/17 Javascript
jquery 新浪网易的评论块制作
2010/07/01 Javascript
javascript级联下拉列表实例代码(自写)
2013/05/10 Javascript
两个数组去重的JS代码
2013/12/04 Javascript
学习JavaScript设计模式之策略模式
2016/01/12 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
jQuery之动画效果大全
2016/11/09 Javascript
基于IView中on-change属性的使用详解
2018/03/15 Javascript
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
layer ui 导入文件之前传入数据的实例
2019/09/23 Javascript
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
Python中实现常量(Const)功能
2015/01/28 Python
老生常谈python的私有公有属性(必看篇)
2017/06/09 Python
Python2.7环境Flask框架安装简明教程【已测试】
2018/07/13 Python
python list转矩阵的实例讲解
2018/08/04 Python
利用Python将文本中的中英文分离方法
2018/10/31 Python
python实现Flappy Bird源码
2018/12/24 Python
Appium Python自动化测试之环境搭建的步骤
2019/01/23 Python
numpy基础教程之np.linalg
2019/02/12 Python
Python批量删除只保留最近几天table的代码实例
2019/04/01 Python
python实现QQ空间自动点赞功能
2019/04/09 Python
python 列表中[ ]中冒号‘:’的作用
2019/04/30 Python
详解用python计算阶乘的几种方法
2019/08/14 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
Python爬虫谷歌Chrome F12抓包过程原理解析
2020/06/04 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
2020/06/24 Python
CSS3实现银灰色动画效果的导航菜单代码
2015/09/01 HTML / CSS
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
2016/03/14 HTML / CSS
HTML5中input输入框默认提示文字向左向右移动的示例代码
2020/09/10 HTML / CSS
DogBuddy荷兰:找到你最完美的狗保姆
2019/04/17 全球购物
会计专业导师推荐信
2014/03/08 职场文书
酒店财务经理岗位职责
2015/04/08 职场文书