pyjwt
pyjwt是一个Python库,可用于编码和解码JSON Web令牌
安装
pip install pyjwt
用法示例
>>> import jwt
>>> encoded_jwt = jwt.encode({"some": "payload","exp": datetime.datetime.utcnow() + datetime.timedelta(seconds=30)}, "secret", algorithm="HS256")
>>> print(encoded_jwt)
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzb21lIjoicGF5bG9hZCJ9.Joh1R2dYzkRvDkqv3sygm5YyK8Gi4ShZqbhK2gxcs2U
>>> jwt.decode(encoded_jwt, "secret", algorithms=["HS256"])
{'some': 'payload'}
使用范例
使用HS256编码和解码令牌
>>> import jwt
>>> key = "secret"
>>> encoded = jwt.encode({"some": "payload"}, key, algorithm="HS256")
>>> print(encoded)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzb21lIjoicGF5bG9hZCJ9.4twFt5NiznN84AWoo1d7KO1T_yoc0Z6XOpOVswacPZg
>>> jwt.decode(encoded, key, algorithms="HS256")
{'some': 'payload'}
API
jwt.encode(payload, key, algorithm="HS256", headers=None, json_encoder=None)
Parameters:
payload(dict) – JWT claims, e.g. dict(exp=…, iss=…, aud=…, sub=…)
key(str) - 适用于所选算法的密钥:
对于非对称算法 : PEM格式的私钥,多行字符串
对于对称算法 : 普通字符串,足够长以保证安全性
algorithm(str) – algorithm to sign the token with, e.g. “ES256”
headers (dict) – 附加JWT报头字段, 例如: dict(kid=“my-key-id”)
json_encoder(json.JSONEncoder) – 有效payload和headers的定制JSON编码器
jwt.decode(jwt, key="", algorithms=None, options=None, audience=None, issuer=None, leeway=0)
Parameters:
jwt(str) - 要解码的令牌
key(str) - 适用于允许算法的密钥
algorithms (str) - 允许的算法,例如[“ES256”]
option(dict) - 扩展解码和验证选项:
require_exp=False 检查exp(到期)声明是否存在
require_iat=False 检查iat(发行)声明是否存在
require_nbf=False 检查nbf(不是之前)声明是否存在
verify_aud=False 检查aud(受众)声明是否与受众匹配
verify_iat=False 检查iat(发出于)索赔值是否为整数
verify_exp=False 检查exp(到期)索赔值是否正常
verify_iss=False 检查iss(发行者)声明是否与发行者匹配
verify_signature=True 验证JWT加密签名
audience (Iterable) – 可选,verify_aud检查的值
issuer (str) – 可选,verify_iss检查的值
leeway (float) – 到期检查的时间间隔(秒)
Return type : dict
Returns : the JWT claims