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)
-------------------------------------------
个性签名:代码过万,键盘敲烂!!!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!