嘿,伙计们!今儿个咱来唠唠 PyJWT 这玩意儿,一个在 Python 里玩 JWT(JSON Web Token)认证贼溜的库。JWT 这东西,简单来说,就像个通行证,你网站的用户登录一次,你给他发个 JWT,他拿着这玩意儿下次再来,就不用再输密码了,方便得一批。PyJWT 就是帮你轻松创建和验证这些“通行证”的工具。
装上 PyJWT,开搞!
装这玩意儿,跟装其他 Python 库一样,pip 一下就搞定: pip install pyjwt
JWT 的三段式
JWT 长得像这样:xxxxx.yyyyy.zzzzz
,三段用点隔开。这可不是随便写的,每一段都有自己的意思。第一段(Header):说的是 JWT 用的什么加密算法,一般是 HS256 或 RS256。 第二段(Payload):放的是用户信息,比如用户名、用户 ID、过期时间啥的。 第三段(Signature):签名,用来验证 JWT 是不是被篡改过。
用 PyJWT 创建 JWT
import jwt
# 你的绝密密钥,千万别泄露!
secret_key = “your-256-bit-secret”
# 要放进 JWT 里的用户信息
payload = {
“user_id”:123,
“username”: “老王”,
“exp”:datetime.datetime.utcnow() + datetime.timedelta(minutes=30) # 过期时间,30 分钟后
}
# 生成 JWT
encoded_jwt = jwt.encode(payload, secret_key, algorithm=“HS256”)
print(encoded_jwt)
这段代码,先导入了 jwt
库,然后定义了个密钥 secret_key
,这玩意儿得保密,就像你家保险柜密码一样。接着,payload
里放了用户信息,注意这里有个 exp
,是过期时间,过了这时间 JWT 就失效了,得重新登录。jwt.encode()
把 payload 和密钥用 HS256 算法加密,生成了 JWT。
温馨提示:过期时间很重要,别忘了设!
解码 JWT
有了 JWT,还得能解码,才能拿到用户信息。 import jwt
# 刚才生成的 JWT
encoded_jwt = “....” # 把上面生成的 JWT 粘贴过来
# 解码 JWT
try:
decoded_payload = jwt.decode(encoded_jwt, secret_key, algorithms=[“HS256”])
print(decoded_payload)
except jwt.ExpiredSignatureError:
print(“JWT 过期了!”)
except jwt.InvalidTokenError:
print(“JWT 不合法!”)
这里用 jwt.decode()
解码 JWT,注意要传密钥和算法。万一 JWT 过期了或者被人篡改了,jwt.decode()
会抛出异常,所以要用 try...except
抓住这些异常。
实际应用场景
这 JWT,用处可大了,比如:用户登录:用户登录成功后,给他发个 JWT,下次他带着 JWT 来,就不用再输密码了。 API 认证:调用 API 时,在请求头里带上 JWT,服务器就能知道你是谁,有没有权限调用这个 API。
其他 PyJWT 的骚操作
PyJWT 除了创建和解码 JWT,还能干不少其他事儿,比如:
自定义 claims:可以在 payload 里加一些自定义的信息。 不同的加密算法:除了 HS256,还能用 RS256、ES256 等其他算法。
温馨提示:用什么算法,得根据你的实际情况来定。
今儿个就先唠到这儿,PyJWT 这玩意儿,用起来还是挺简单的,赶紧试试吧!