这里要注意使用的是pip install pyjwt 这个包
1、生成、验证、解析jwt
class JwtTools():
def __init__(self):
self.key = settings.SECRET_KEY
self.algorithms = ['HS256']
#生成jwt
def generate_jwt(self,payload:dict):
token = jwt.encode(payload, key = self.key, algorithm='HS256')
return token.decode('utf-8') # PyJWT是2.0.0之前的版本,需要解码,2.0.0之后的版本不需要解码
#验证jwt
def verify_jwt(self,token:str):
try:
payload = jwt.decode(token, key = self.key, algorithms=self.algorithms)
except jwt.ExpiredSignatureError:
raise APIException(detail={'status': 400, 'msg': '过期'})
return payload
#解析jwt
def analysis_jwt(self,token:str):
payload = jwt.decode(token, key = self.key, verify=False, algorithms=self.algorithms)
return payload
2、payload预定义参数说明
- iss (Issuer):这个通常是生成token的应用的名字或者标识,例如 "my_auth_server"。
- sub (Subject):这个通常是关于token的主题信息,例如用户的ID,"user123"。
- aud (Audience):这个通常是token的接收者,例如 "my_client_app"。
- exp (Expiration Time):这个是一个UNIX时间戳,表示token的过期时间。例如使用Python的 time.time() + 3600,表示1小时后过期。
- nbf (Not Before):这个也是一个UNIX时间戳,表示在这个时间之前,token都是不可用的。例如 time.time() + 300,表示5分钟后token才可用。
- iat (Issued At):这个是一个UNIX时间戳,表示token的发行时间。通常可以使用 time.time()。
- jti (JWT ID):这个是token的唯一标识,可以使用UUID生成一个唯一的值,例如 "fbb9b7f2-3fe1-44f0-b3b1-5b56a1f9f4e1"。
- 自定义其他参数
"""自定义payload内容"""
payload = {
'sub': userid,
'exp': time.time() + times,
'other': other
}