JWT实践
·
参考书籍:《FastAPI web入门、进阶与实践》
JWT是什么
JWT(JSON Web Token)是生成token的一种方法,而token本质是一个字符串。由Header、Payload和Signature组成。Header包含两个两个属性,alg:签名算法,type:token类型,如下:
{ "alg": "HS256", "typ": "JWT" }
Payload包含:注册声明(标准字段):如 iss(签发者)、exp(过期时间)、sub(用户ID)等。公共声明:自定义的非敏感信息(如用户名、角色)。私有声明:服务端与客户端约定的自定义字段。这些字段是非必须的,一般要传的就是username、roles和exp。
例子:
{
// 注册声明(标准字段)
"iss": "auth_server", // 签发者
"sub": "user123", // 用户ID
"aud": "api.example.com", // 接收方
"exp": 1730332800, // 过期时间(2025-07-28 00:00:00 UTC)
"iat": 1730329200, // 签发时间(2025-07-27 23:00:00 UTC)
"nbf": 1730329200, // 生效时间(同签发时间)
// 公共声明(自定义非敏感信息)
"username": "john_doe",
"roles": ["user", "editor"],
// 私有声明(服务端与客户端约定)
"internal_id": "abc-xyz-789",
"custom_flag": true
}
Signature是签证信息,用于验证信息没有被篡改。其中secret是服务端设置的一个字符串,组成结构如下:
Signature=HMACSMA256(base64UrlEncode(Header)+"."+base64UrlEncode(Payload),secret)
最后生成token字符串的格式如下:
token=base64UrlEncode(Header).base64UrlEncode(Payload).HS256(base64UrlEncode(Header).base64UrlEncode(Payload),secret)
JWT实践
python-jose库封装了JWT的实现,直接调用jwt.encode和jwt.decode便可以完成token的生成与解析。
首先,安装python-jose。
pip install python-jose
生成和解析token的代码如下:
from datetime import timedelta, datetime
from jose import jwt
SECRET ="qwertyuiopasdfghjklzxcvbnm"
ALGORITHM = "HS256"
class TokenUtils:
@staticmethod
def token_encode(data):
return jwt.encode(data, SECRET, ALGORITHM)
@staticmethod
def token_decode(token):
return jwt.decode(token, SECRET, algorithms=[ALGORITHM])
payload ={
"username" : "zhangsan",
"exp" : datetime.now() + timedelta(minutes=30)
}
token = TokenUtils.token_encode(payload)
print(token)
data = TokenUtils.token_decode(token)
print(data)
更多推荐
所有评论(0)