FastAPI系列:jwt认证

jwt认证

1.头部Header,主要是对jwt元数据的描述

{
    'alg': 'HS256',
    'typ': 'JWT'
}

2.载荷playload,主要包含jwt信息需要传递的主体数据

{
    'iss': 'jack', # 由jwt签发
    'sub': 'jack', # 该jwt面向的用户组,也称为主题
    'aud': 'jack', # 由谁来接收jwt信息
    'iat': 'xxxxxx', # jwt的签发时间
    'nbf': 'xxxxxx', # jwt的生效时间
    'exp': 'xxxxxx', # jwt的过期时间,unix时间戳
    'jti': 'xxxxxx' # jwt的唯一身份标识
}

3.密钥
4.示例

# 推荐使用python-jose
pip install python-jose

# python-jose的不同加密库
python-jose 默认的方式,使用python-rsa和python-ecdsa进行加密和解密
python-jose[cryptography] 使用cryptography加解密库
python-jose[pycryptodome] 使用pycryptodome加解密库
python-jose[pycrypto] 使用pycrypto加解密库 

# 使用
from datetime import datetime, timedelta
from jose import jwt 
SECRET_KEY = 'secret'  # 可以使用 openssl rand -hex 32 生成
ALGORITHM = 'HS256'
ACCESS_TOKEN_EXPIRE_MINUTES = 30

class TokenUtils:
    @staticmethod
    def token_encode(data):
        return jwt.encode(data, SECRET_KEY, algorithm=ALGORITHM)
    
    @staticmethod
    def token_decode(token):
        return jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
    

data = {
    'name': 'admin',
    'exp': datetime.utcnow() + timedelta(minutes=5)
}

if __name__ == '__main__':
    token = TokenUtils.token_encode(data=data)
    print(token)
    
    playload = TokenUtils.token_decode(token=token)
    print(playload)
posted @ 2024-02-28 19:00  我在路上回头看  阅读(271)  评论(0编辑  收藏  举报