import time import jwt class Token(object): def __init__(self): pass @classmethod def encrpyt_token(cls, username, uuid, exptime=None, secret=None): """ iss:该JWT的签发者,是否使用是可以选择的。 sub:该JWT所面向的用户,是否使用是可选的。 aud:接收该JWT的一方,是否使用是可选的。 exp(expires):什么时候过期,是一个UNIX的时间戳,是否使用是可选的。默认设置为:30分钟 iat(issued at):在什么时候签发UNIX时间,是否使用是可选的。 nbf(not before):如果当前时间在nbf的时间之前,则Token不被接受,一般都会留几分钟,是否使用是可选的。 :return: """ if not exptime: exptime = time.time() + 60*30 if not secret: secret = 'iam' payloads = { 'iss': 'IAM JWT Builder', 'iat': time.time(), 'username': username, 'uuid': str(uuid), "exp": exptime } encoded_jwt = jwt.encode(payloads, secret, algorithm='HS256').decode() return encoded_jwt @classmethod def decrypt_token(cls, token, secret=None): try: if not secret: secret = 'iam' decode_jwt = jwt.decode(token, secret, algorithms=['HS256']) return decode_jwt except jwt.exceptions.InvalidSignatureError as e: return {'error': '签名验证失败'} except jwt.exceptions.ExpiredSignatureError as e: return {'error': '签名过期'} if __name__ == '__main__': encrpyt_token = Token.encrpyt_token('lisi', '123dasddas') print(encrpyt_token) decrypt_token = Token.decrypt_token('eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJJQU0gSldUIEJ1aWx' 'kZXIiLCJpYXQiOjE2Mzg0MTc5NTQuNjU3Nzk1MiwidXNlcm5hbWUiOiJsaXNpIiwidXVpZCI6IjEyM2Rhc2RkYXMiLCJleHA' 'iOjE2Mzg0MTk3NTQuNjU3Nzk1Mn0.lR0_Dv89iQ9fnWckog2AvHPIbITy39f0SEquye_CYNg') print(decrypt_token)