import time
import jwt
from webapp.salt import md
Header头部信息
{
"alg": "HS256", 加密算法
"typ": "JWT" 类型
}
Payload 负载
{
"iss": "Online JWT Builder", 发布者的url地址
"iat": 1416797419, 该jwt的发布时间;unix 时间戳
"exp": 1448333419, 该jwt销毁的时间;unix时间戳
"aud": "www.zzzzzzz.com", 接受者的url地址
"sub": "uid", 该JWT所面向的用户,用于处理特定应用,不是常用的字段
"nickname": "goodspeed", jwt包涵的昵称,由前端提供
"username": "goodspeed", jwt包涵的用户名,由前端提供
"scopes": [ "admin", "user" ] jwt包涵的权限,由后端端提供
}
Signature 签名
HMACSHA256(
base64UrlEncode(header) + "." + bs64编码Header
base64UrlEncode(payload), bs64编码Payload
SECREATE_KEY 秘钥
)
生产token
def token(username, scopes):
header = {
'alg': 'HS256',
'typ': 'JWT'
}
payload = {
"iss": "gusibi.com",
"iat": int(time.time()),
"exp": int(time.time()) + 86400 * 7,
"aud": "www.baidu.com",
"sub": '1',
"username": username,
"scopes": scopes
}
jwt_token = jwt.encode(payload, # payload, 有效载体
"你的签名秘钥", # 进行加密签名的密钥
algorithm="HS256", # 指明签名算法方式, 默认也是HS256
headers=header # json web token 数据结构包含两部分, payload(有效载体), headers(标头)
).decode('ascii') # python3 编码后得到 bytes, 再进行解码(指明解码的格式), 得到一个str
return jwt_token
j解析token
def verify_bearer_token(token):
# 解析出来的就是 payload 内的数据
data = jwt.decode(token, '你的签名秘钥', audience='www.gusibi.com', algorithms=['HS256'])
if data:
return True, token
return False, token
盐值加密密码
pwd = md('123456')
print(pwd)