JWT加密解密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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)

  

posted @   长乐未央丫  阅读(395)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示