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验证的方法相关推荐

  1. python token 访问控制_python 产生token及token验证

    1.前言 最近在做微信公众号开发在进行网页授权时,微信需要用户自己在授权url中带上一个类似token的state的参数,以防止跨站攻击. 在经过再三思考之后,自己试着实现一个产生token和验证to ...

  2. python怎么获取token值_python 产生token及token验证

    1.前言 最近在做微信公众号开发在进行网页授权时,微信需要用户自己在授权url中带上一个类似token的state的参数,以防止跨站攻击. 在经过再三思考之后,自己试着实现一个产生token和验证to ...

  3. python token过期_Python token及token验证

    注意仅可以在Python3中使用 token及token验证 涉及模块hmac与base64 hmac模块 简介 HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息 ...

  4. Python 生成 JWT(json web token) 及 解析方式

    一.关于 jwt 的原理及概念可以自行在网络上搜索了解一下,这里推荐一篇写的比较好的博客 深入了解Json Web Token之概念篇 另附 JWT 的官方文档: https://jwt.io/int ...

  5. Flask简单调用Redis、MySQL和生成token及token验证

    项目地址:https://github.com/MasonYyp/myflask 1 安装python基础环境 # 安装flask pip install flask# 安装redis pip ins ...

  6. PHP无状态对象,(PHP)基于Token的身份验证中对无状态的理解

    假设我们设计的Token储存的信息为: 用户名.发行时间.过期时间.签名 在用户登录成功后,我们获取到用户的用户名.此时的时间戳,并将它们和我们设置的过期时间拼接在一起,组成一个字符串,假设为: $i ...

  7. SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题

    SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题 参考文章: (1)SpringBoot2.0 整合 JWT 框架,解决Token跨域验证问题 (2)https://www. ...

  8. token验证_java基于token的身份验证?读完之后,大部分程序员收藏了...

    什么是token? token相当于是一个令牌,在用户登录的时候由服务器端生成(基于用户名.时间戳.过期时间.发行者等信息进行签名),然后发放给客户端,客户端将令牌保存,在以后需要登录验证的请求中都需 ...

  9. java token生成和验证_SpringBoot集成JWT生成token及校验方法过程解析

    GitHub源码地址:https://github.com/zeng-xian-guo/springboot_jwt_token.git 封装JTW生成token和校验方法 public class ...

最新文章

  1. 10个方法让程序员更加优秀
  2. ACM公布2017年图灵奖,大卫·帕特森和约翰·轩尼诗获奖
  3. Precision和Recall
  4. Solr入门和实践以及我对Solr的8点理解
  5. shellwhile比较_[Shell] if、for、while流程语句以及整数字符串判断比较的实例详解...
  6. 数据结构杂谈番外篇——时间复杂度计算
  7. linux 开启防火墙的指定端口
  8. 时间管理类APP的Demo版本
  9. linux-0.11 内核源码学习笔记一(嵌入式汇编语法及使用)
  10. 声明,本博客文章均为转载,只为学习,不为其他用途。感谢技术大牛的技术分享,让我少走弯路。...
  11. 国科大操作系统思考题答案总结
  12. 多目标跟踪算法SOART
  13. ubuntu linux目录绿色高亮问题
  14. Andriod 简介
  15. 宝宝纸尿裤怎么选?我联合2000位宝妈,对20款纸尿裤做了次测评
  16. 【29】CISC和RISC:为什么手机芯片都是ARM?
  17. zblogphp 广告联盟_天兴工作室:广告位大全插件(网站各种广告位集合效果)
  18. emui和鸿蒙哪个好,今天升级了鸿蒙系统,使用起来还真是传说中的顺滑,比之前的Emui好用。...
  19. WPF学习开发客户端软件-任务助手(已上传源码)
  20. SQL Server 2000 安装时出现 以前的某个程序安装已经在计算机上创建挂起的文件操作

热门文章

  1. 数据可视化:在 React 项目中使用 Vega 图表 (一)
  2. 信奥中的数学 组合篇 相关资料汇总(2022.07.08)
  3. 将字符串,数组等任意格式转为json(JSON)数据,Arrays是数组工具类,将任意数组转字符串或数组操作
  4. 人到中年这种茶要多喝,越喝血管越干净!坚持一个月,头晕眼花不再来!
  5. html 多张图片自动滚动,JS实现图片的不间断连续滚动的简单实例
  6. 骁龙780G​和骁龙750G哪个好 高通骁龙780G​和骁龙750G区别参数对比
  7. 文字识别在高德地图数据生产中的演进
  8. Embedding技术
  9. 算法基础:k最近邻算法
  10. C语言中的比较大小的宏定义与反斜杠符号 ' \ '