python token_python 产生token及token验证的方法
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 token_python 产生token及token验证的方法相关推荐
- python token 访问控制_python 产生token及token验证
1.前言 最近在做微信公众号开发在进行网页授权时,微信需要用户自己在授权url中带上一个类似token的state的参数,以防止跨站攻击. 在经过再三思考之后,自己试着实现一个产生token和验证to ...
- python怎么获取token值_python 产生token及token验证
1.前言 最近在做微信公众号开发在进行网页授权时,微信需要用户自己在授权url中带上一个类似token的state的参数,以防止跨站攻击. 在经过再三思考之后,自己试着实现一个产生token和验证to ...
- python token过期_Python token及token验证
注意仅可以在Python3中使用 token及token验证 涉及模块hmac与base64 hmac模块 简介 HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息 ...
- Python 生成 JWT(json web token) 及 解析方式
一.关于 jwt 的原理及概念可以自行在网络上搜索了解一下,这里推荐一篇写的比较好的博客 深入了解Json Web Token之概念篇 另附 JWT 的官方文档: https://jwt.io/int ...
- Flask简单调用Redis、MySQL和生成token及token验证
项目地址:https://github.com/MasonYyp/myflask 1 安装python基础环境 # 安装flask pip install flask# 安装redis pip ins ...
- PHP无状态对象,(PHP)基于Token的身份验证中对无状态的理解
假设我们设计的Token储存的信息为: 用户名.发行时间.过期时间.签名 在用户登录成功后,我们获取到用户的用户名.此时的时间戳,并将它们和我们设置的过期时间拼接在一起,组成一个字符串,假设为: $i ...
- SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题
SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题 参考文章: (1)SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题 (2)https://www. ...
- token验证_java基于token的身份验证?读完之后,大部分程序员收藏了...
什么是token? token相当于是一个令牌,在用户登录的时候由服务器端生成(基于用户名.时间戳.过期时间.发行者等信息进行签名),然后发放给客户端,客户端将令牌保存,在以后需要登录验证的请求中都需 ...
- java token生成和验证_SpringBoot集成JWT生成token及校验方法过程解析
GitHub源码地址:https://github.com/zeng-xian-guo/springboot_jwt_token.git 封装JTW生成token和校验方法 public class ...
最新文章
- 10个方法让程序员更加优秀
- ACM公布2017年图灵奖,大卫·帕特森和约翰·轩尼诗获奖
- Precision和Recall
- Solr入门和实践以及我对Solr的8点理解
- shellwhile比较_[Shell] if、for、while流程语句以及整数字符串判断比较的实例详解...
- 数据结构杂谈番外篇——时间复杂度计算
- linux 开启防火墙的指定端口
- 时间管理类APP的Demo版本
- linux-0.11 内核源码学习笔记一(嵌入式汇编语法及使用)
- 声明,本博客文章均为转载,只为学习,不为其他用途。感谢技术大牛的技术分享,让我少走弯路。...
- 国科大操作系统思考题答案总结
- 多目标跟踪算法SOART
- ubuntu linux目录绿色高亮问题
- Andriod 简介
- 宝宝纸尿裤怎么选?我联合2000位宝妈,对20款纸尿裤做了次测评
- 【29】CISC和RISC:为什么手机芯片都是ARM?
- zblogphp 广告联盟_天兴工作室:广告位大全插件(网站各种广告位集合效果)
- emui和鸿蒙哪个好,今天升级了鸿蒙系统,使用起来还真是传说中的顺滑,比之前的Emui好用。...
- WPF学习开发客户端软件-任务助手(已上传源码)
- SQL Server 2000 安装时出现 以前的某个程序安装已经在计算机上创建挂起的文件操作
热门文章
- 数据可视化:在 React 项目中使用 Vega 图表 (一)
- 信奥中的数学 组合篇 相关资料汇总(2022.07.08)
- 将字符串,数组等任意格式转为json(JSON)数据,Arrays是数组工具类,将任意数组转字符串或数组操作
- 人到中年这种茶要多喝,越喝血管越干净!坚持一个月,头晕眼花不再来!
- html 多张图片自动滚动,JS实现图片的不间断连续滚动的简单实例
- 骁龙780G​和骁龙750G哪个好 高通骁龙780G​和骁龙750G区别参数对比
- 文字识别在高德地图数据生产中的演进
- Embedding技术
- 算法基础:k最近邻算法
- C语言中的比较大小的宏定义与反斜杠符号 ' \ '