python jwt token使用

官网 https://pyjwt.readthedocs.io/en/latest/index.html
# 官网 https://pyjwt.readthedocs.io/en/latest/index.html
# 我们在jwt.encode函数中使用了三个参数:
# 1)第一个是payload,主要用来存放有效的信息,例如用户名,过期时间等想要传递的信息。payload字典内部官方指定有指定key,
#    如exp用来指定token的生命周期。更多指定key参数可参考这里;
# 2)第二个key,一个秘钥字串,这个秘钥主要用在下文Signature签名中,服务端用来校验Token合法性,这个秘钥仅服务端知道,不能泄露。
# 3)第三个参数指定Signature签名所用的算法。
import time

import jwt
from datetime import datetime, timedelta

key1 = "123456"
key2 = "12345"

payload = {
    'exp': datetime.now() + timedelta(seconds=2),  # 令牌过期时间,本地时间
    'username': 'BigFish'  # 想要传递的信息,如用户名ID
}

print("期望结果:", payload)

e1 = jwt.encode(payload, key1, algorithm='HS256')
print(e1)
d1 = jwt.decode(e1, key1, algorithms='HS256')
print("解析的结果中exp是时间戳:", d1)
# 转换后发现时间和期望结果相差8个小时,如果要验证token有效期,需要减去8个小时的时间戳28800
if d1.get("exp") - 28800 > time.time():
    print("token在有效期内")
else:
    print("token已过期")

# e2 = jwt.encode(payload, key2, algorithm='HS256')
# print(e2)
# # 直接报错,签名验证失败,不能用key2秘钥加密后用key1去解析
# d2 = jwt.decode(e2, key1, algorithms='HS256')
# print(d2)

 

posted @ 2023-04-24 12:26  whitewall  阅读(172)  评论(0编辑  收藏  举报