python学习交流公众号 Hello Python上线啦,欢迎关注
jwt被广泛用于各类鉴权中,其中jwt token如下所示:
b'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VybmFtZSI6ImFkaW1uIn0.MeQOdDiiI39mBpgbFNnBVNdJMDhUpRTxziPeFJKB2fA'
jwt token
JWT生成的Token是一个用两个点(.)分割的长字符串
点分割成的三部分分别是Header头部,Payload负载,Signature签名:Header.Payload.Signature
JWT是不加密的,任何人都可以读的到其中的信息,其中
第一部分Header和第二部分Payload只是对原始输入的信息转成了base64编码,
print(base64.b64decode('eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9'))
print(base64.b64decode('eyJ1c2VybmFtZSI6ImFkaW1uIn0='))
#这里最后加=的原因是base64解码对传入的参数长度不是2的对象,需要再参数最后加上一个或两个等号=
第三部分Signature是用header+payload+secret_key进行加密的结果。应确保私钥的保密性。保证signature不可伪造。
主要用在下文Signature签名中,服务端用来校验Token合法性,解密成功说明Token正确,且数据没有被篡改
pip install pyjwt
def get_jwt_token(user_name, role_data='default'):
"""
生成jwt-token
:param unit_name:
:param role_data:
:return:
"""
payload = {
'exp': datetime.utcnow() + timedelta(seconds=3600), # 单位秒
'iat': datetime.utcnow(),
'data': {
'username': user_name, 'role_data': role_data}
}
encoded_jwt = jwt.encode(payload, JWT_SECRET_KEY, algorithm='HS256')
return str(encoded_jwt, encoding='utf8')
def decode_jwt_token(encoded_jwt):
# 关闭过期时间检验
de_code = jwt.decode(encoded_jwt, JWT_SECRET_KEY, algorithms=['HS256'])
return de_code
// 加密后的token传给前端,进行存储。
// 存储
localStorage.setItem("lastname", "Smith");
// 检索
document.getElementById("result").innerHTML = localStorage.getItem("lastname");
//退出时
localstorge.clear()方法,token被清空
"Authori":"Token"
http_authori = request.META.get('HTTP_AUTHORI')