python 实现JWT
1.JWT概念
2.python实现JWT
python2.7实现
py2环境下调用hmac模块,需要注意的是,3.4版本前,默认的digestmod都是hashlib.md5的摘要算法,所以此参数可以不填
# 如果你们的项目有祖传py2的代码参考如下 import time import json import hmac import base64 header = { "typ": "JWT", "alg": "MD5" } payload = { "user_id": 1001, "user_role": "admin", "iat": 1637569309, "exp": 1637569309 + 3600 # expire after 60min } secret_key = 'todayissunday' def b64_encode(s): return base64.b64encode(s) def b64_decode(s): return base64.b64decode(s) # 造轮子 def encode_(secret, header, payload): header_json = json.dumps(header,separators=(',', ':'), sort_keys=True) payload_json = json.dumps(payload, separators=(',', ':'), sort_keys=True) segments = [] segments.append(b64_encode(header_json)) segments.append(b64_encode(payload_json)) msg = b'.'.join(segments) hm = hmac.new(secret, msg) # digestmod=None 认用hashlib.md5 hm_base64 = b64_encode(hm.digest()) segments.append(hm_base64) token = b'.'.join(segments) print("JWT: ", token) return token def decode_(token, secret): # valid signature header_bs, payload_bs, signature_bs = token.split(b'.') hm = hmac.new(secret, header_bs + b'.' + payload_bs) # 默认用hashlib.md5 input_hm = b64_encode(hm.digest()) if signature_bs != input_hm: raise Exception # valid expire time payload_js = b64_decode(payload_bs) payload = json.loads(payload_js) now = time.time() # 当前时间 if int(now) > int(payload["exp"]): raise Exception("time expires") print(payload) return payload if __name__ == "__main__": token = encode_(secret_key,header,payload) decode_(token, secret_key)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律