14个文本转图像AI API
PyJWT:轻松搞定Token认证,让你的API更安全!
2024-12-19
大家好啊!今天我要跟小伙伴们分享一个特别实用的Python库 – PyJWT。在开发Web应用时,我们经常需要处理用户认证的问题。JWT(JSON Web Token)就是一个非常流行的解决方案,而PyJWT让我们可以轻松地在Python中使用JWT。
什么是JWT?
JWT可以理解为一个加密的信息包,就像是给用户发放的一个通行证。它由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。想象一下,它就像是一封带防伪印章的信,不仅包含了重要信息,还能验证这些信息是否被篡改。
安装PyJWT
首先,我们需要安装PyJWT库:
pip install PyJWT
创建JWT Token
让我们来看看如何创建一个JWT token:
import jwt
import datetime
# 定义密钥
SECRET_KEY = "your-secret-key"
# 创建token
def create_token(user_id):
# 设置token的有效载荷
payload = {
'user_id': user_id,
'exp': datetime.datetime.utcnow() + datetime.timedelta(days=1), # 过期时间:1天
'iat': datetime.datetime.utcnow() # 发行时间
}
# 生成token
token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
return token
# 测试创建token
token = create_token(123)
print("生成的token:", token)
小贴士:SECRET_KEY
要保管好哦!它就像是你的保险箱密码,千万不能泄露。
验证JWT Token
有了token,当然要验证它是否有效:
def verify_token(token):
try:
# 验证token
payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
return payload
except jwt.ExpiredSignatureError:
return "Token已过期!"
except jwt.InvalidTokenError:
return "无效的Token!"
# 测试验证token
try:
result = verify_token(token)
print("解码后的数据:", result)
except Exception as e:
print("验证失败:", str(e))
在Web应用中使用JWT
下面是一个使用Flask框架的简单示例:
from flask import Flask, jsonify, request
from functools import wraps
app = Flask(__name__)
# 验证token的装饰器
def token_required(f):
@wraps(f)
def decorated(*args, **kwargs):
token = request.headers.get('Authorization')
if not token:
return jsonify({'message': '缺少token!'}), 401
try:
payload = verify_token(token)
request.user = payload
except:
return jsonify({'message': 'token无效!'}), 401
return f(*args, **kwargs)
return decorated
# 登录接口
@app.route('/login', methods=['POST'])
def login():
# 这里简化了登录逻辑
user_id = 123
token = create_token(user_id)
return jsonify({'token': token})
# 需要验证token的接口
@app.route('/protected')
@token_required
def protected():
return jsonify({'message': '你成功访问了受保护的接口!'})
注意事项:
- token一般放在请求头的Authorization字段中
- 生产环境中要使用更安全的密钥
- 根据需求设置合适的token过期时间
实用小技巧
自定义载荷
# 添加更多自定义信息
payload = {
'user_id': user_id,
'username': 'python_lover',
'role': 'admin',
'exp': datetime.datetime.utcnow() + datetime.timedelta(days=1)
}
不同的加密算法
PyJWT支持多种加密算法:
# 使用RS256算法(非对称加密)
token = jwt.encode(payload, private_key, algorithm='RS256')
练习题
- 尝试创建一个包含用户角色信息的token
- 实现一个token刷新的功能
- 给token添加自定义的过期时间
小伙伴们,今天的Python学习之旅就到这里啦!记得动手敲代码,有问题随时在评论区留言哦。JWT的使用场景非常广泛,掌握了它,你就离成为后端高手更近一步啦!祝大家学习愉快,Python学习节节高!
文章转自微信公众号@黑发工程
同话题下的热门内容