Python中JWT-Json Web Token的使用

1 下载安装PyJWT。我这里使用的版本是1.7.1,环境Python3.6.3

pip install PyJWT==1.7.1

2 导入生成JWT

import jwt
# 设置payload
token_dict = {
	'iat': time.time(),
	'name': 'xxx'  # 可加入自定义的参数
}
"""
payload一些固定参数的介绍,如上面的‘iat’.
iss  【issuer】发布者的url地址
sub 【subject】该JWT所面向的用户,用于处理特定应用,不是常用的字段
aud 【audience】接受者的url地址
exp 【expiration】 该jwt销毁的时间;unix时间戳
nbf  【not before】 该jwt的使用时间不能早于该时间;unix时间戳
iat   【issued at】 该jwt的发布时间;unix 时间戳
jti    【JWT ID】 该jwt的唯一ID编号
"""
# 设置headers
headers = {
    'alg': "HS256", 
}
"""
# headers中一些固定参数的说明
jku: 发送JWK的地址;最好用HTTPS来传输
jwk: 就是之前说的JWK
kid: jwk的ID编号
x5u: 指向一组X509公共证书的URL
x5c: X509证书链
x5t:X509证书的SHA-1指纹
x5t#S256: X509证书的SHA-256指纹
typ: 在原本未加密的JWT的基础上增加了 JOSE 和 JOSE+ JSON。JOSE序列化后文会说及。适用于JOSE标头的对象与此JWT混合的情况。
crit: 字符串数组,包含声明的名称,用作实现定义的扩展,必须由 this->JWT的解析器处理。不常见。
"""
# 生成json web token
# 调用jwt库,生成json web token
jwt_token = jwt.encode(
	token_dict,  # payload, 有效载体
    "abcdefg123456",  # 进行加密签名的密钥
    algorithm="HS256",  # 指明签名算法方式, 默认也是HS256
    headers=headers  # json web token 数据结构包含两部分, payload(有效载体), headers(标头)
    ).decode('utf-8')  # python3 编码后得到 bytes, 再进行解码(指明解码的格式), 得到一个str

3 进行JWT的认证

# 生成json web token 后进行认证
try:
  #需要解析的 jwt密钥使用和加密时相同的算法
	data = jwt.decode(
	token,  # 生成的jwt
	"abcdefg123456",  # 加密时的秘钥
	algorithms=['HS256'])  # 加密时使用的算法
except Exception as e:
  # 如果 jwt 被篡改过; 或者算法不正确; 如果设置有效时间, 过了有效期; 或者密钥不相同; 都会抛出相应的异常
  print(e)
# 最后解析出来的数据就是先前加密时放入payload中的内容
data = {
	'iat': time.time(),
	'name': 'xxx'
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章