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)

3.django web应用中应用JWT完成认证

posted on   进击的davis  阅读(331)  评论(0编辑  收藏  举报

编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示