注意仅可以在Python3中使用

token及token验证

涉及模块hmac与base64

hmac模块

简介

HMAC是密钥相关的哈希运算消息认证码,HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出

典型应用HMAC的一个典型应用是用在“质疑/应答”(Challenge/Response)身份认证中。认证流程:先由客户端向服务器发出一个验证请求。

服务器接到此请求后生成一个随机数并通过网络传输给客户端(此为质疑)。

客户端将收到的随机数提供给ePass,由ePass使用该随机数与存储在ePass中的

与此同时,服务器也使用该随机数与存储在服务器数据库中的该客户密钥进行HMAC-MD5运算,如果服务器的运算结果与客户端传回的响应结果相同,则认为客户端是一个合法用户

安全性

由上面的介绍,我们可以看出,HMAC算法更象是一种加密算法,它引入了密钥,其安全性已经不完全依赖于所使用的HASH算法,安全性主要有以下几点保证:

(1) 使用的密钥是双方事先约定的,第三方不可能知道。作为非法截获信息的第三方,能够得到的信息只有作为“挑战”的随机数和作为“响应”的HMAC结果,无法根据这两个数据推算出密钥。由于不知道密钥,所以无法仿造出一致的响应。

生产token

原理:

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

import time

import base64

import hmac

def generate_token(key, expire=3600):

""":param key: str (用户给定的key,需要用户保存以便之后验证token,每次产生token时的key 都可以是同一个key):param 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")

ret = generate_token("1234566788")

print(ret)

验证token

原理

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

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

def certify_token(key, token):

""":param key: str:param token: str:return: boolean"""

token_str = base64.urlsafe_b64decode(token).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

key = '1234566788'

token = 'MTUzMTc0NDU2OS43OTEzNjg3OjVkZjllNGIyZDgzMmNlYWU2YmRjOGFhMzk2M2Q4NWJmOGVjZTI5YmE=' certify_token(key, token)

python token过期_Python token及token验证相关推荐

  1. python token过期_请求时token过期自动刷新token

    1.在开发过程中,我们都会接触到token,token的作用是什么呢?主要的作用就是为了安全,用户登陆时,服务器会随机生成一个有时效性的token,用户的每一次请求都需要携带上token,证明其请求的 ...

  2. token 过期刷新令牌_Android token过期刷新处理的方法示例

    token token的意思是"令牌",是用户身份的验证方式,最简单的token组成:uid(用户唯一的身份标识).time(当前时间的时间戳).sign(签名,由token的前几 ...

  3. java如何判断token过期_【Java】后台判断token过期,后台刷新token,接下来该如何处理...

    如标题所示 我再详细描述一下我遇到的问题,如果我再发送请求的试试,后台验证header中的token,如果这时候,发现token过期,然后一系列判断其为合法token,允许token刷新,后台主动刷新 ...

  4. vue token过期后自动刷新token

    在系统登录后,后端返回一个token,和refreshToken.每次接口请求的时候都会携带这个token,但是这个token一般是有过期时间的,假设过期时间为半小时,你半小时内没有调接口.半小时后你 ...

  5. 用vuex对token/refresh_token 进行管理以及处理token过期问题

    这里介绍对token的处理 问题1:token数据或者其他数据,存在vuex仓库中,刷新会丢失状态 . 问题2:数据只存在本地,数据变化了,相关的视图并不会更新. Vuex 容器中的数据只是为了方便在 ...

  6. vue token过期后的处理和网关白名单

    判断是否登录,已经登陆则获取getinfo.否则跳转登录. 如果返回401,token过期,就消除token.然后刷新就会跳转登录. 设置让他自己跳到登录,不用刷新. 网关白名单设置通过,其他的必须携 ...

  7. vue实际运用六:处理token过期

    vue实际运用六:处理token过期 1. 后端为了安全,token一般存在有效时间,当token过期,所有请求失效 解决方案: 1)在请求发起前拦截每个请求,判断token的有效时间是否已经过期,若 ...

  8. vue实际运用:处理token过期

    后端为了安全,token一般存在有效时间,当token过期,所有请求失效 1. 解决方案: 1)在请求发起前拦截每个请求,判断token的有效时间是否已经过期,若已过期,则将请求挂起,先刷新token ...

  9. hdfs delegation token 过期问题分析

    什么是delegation token delegation token其实就是hadoop里一种轻量级认证方法,作为kerberos认证的一种补充.理论上只使用kerberos来认证是足够了,为什么 ...

最新文章

  1. hibernate EJBQL QBC QBE
  2. (chap1 网络基础知识)网络的构成要素:(4-6)集线器和3层交换机
  3. java元婴期(22)----java进阶(mybatis(1)---mybatis框架概述入门程序)
  4. CodeForces - 1498E Two Houses(交互+图论,结论题)
  5. oracle全文检索 分区表,oracle全文检索
  6. 【深度学习】深度学习门前徘徊——正向传播
  7. Vue+Element 表格打印
  8. 使用pip无法完全卸载autoitlibrary,提示 we cannot accurately determine which files belong to it which would‘解决办法
  9. 提问(小白问题):为什么这里调试的时候无法输入
  10. 升级 MDK 5.37 后的问题处理: AC6编译选项, printf, 重启失效等
  11. Win10系统繁体字输入切换为简体字快捷键
  12. 计算机键盘上clr是什么意思,CLR是什么意思
  13. ENVI 混合像元分解
  14. 哈工大计算机学院学号,【复试机试内容回忆汇总帖】2019年哈尔滨工业大学计算机考研...
  15. (3)数仓建设-数据仓库设计方案
  16. 腾讯X5 浏览器内核加载
  17. unity3D中的伽马空间和线性空间
  18. 2022年全国计算机等级考试(四级)测试题含答案
  19. GB 9706.1-2020和GB9706.1-2007对照表
  20. 免费开源.net的pdf操作控件PdfiumViewer

热门文章

  1. 懒人的七种超级减肥方法 - 生活至上,美容至尚!
  2. 因使用 Cookie 引发的 15 亿“天价”罚单
  3. easyar 识别成功后,怎么回调java层代码
  4. AC米兰签巴神3人协定终曝光 10年主力被逼降薪遭封杀
  5. Python 爬虫实践-抓取小说
  6. 把选中变量、方法时的高亮给弄没了,怎么找回来
  7. RNA-Seq数据分析,质控,STAR比对步骤
  8. dot.js嵌套html文件,doT.js实现混合布局,判断,数组,函数使用,取模,数组嵌套...
  9. 巧用Dos生成Firebird Sql执行
  10. cv2 imread()函数