Python实现Token生成与验证:基于HMAC-SHA1与Base64编码

洛溪
洛溪
发布时间:2026-10-13 | 4人浏览过
原创

本文介绍在Python中利用HMAC-SHA1算法生成Token及验证Token的方法。通过结合用户Key与过期时间戳,经Base64编码生成Token。验证时解码并比对摘要,确保Token未过期且未被篡改,适用于微信网页授权等防跨站攻击场景。

1、前言

近期在进行微信公众号开发时,涉及网页授权环节。微信要求开发者在授权URL中携带类似token的state参数,以此防范跨站请求伪造攻击。

经过深入考量,笔者尝试实现一套完整的Token生成与验证方案。下文将展示相关代码,恳请读者批评指正。

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时相同的Key,对提取出的最大过期时间戳再次执行HMAC-SHA1算法运算。最后,将计算得出的摘要与从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!!!

本代码仅支持在Python 3.x版本环境中运行。

以上关于Python生成Token及验证Token的方法即为本文分享的全部内容,希望能对读者有所启发。欢迎大家参考使用,并期待各位的支持与反馈。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表