python jwt实现token登录验证
时间: 2024-12-31 17:39:30 浏览: 28
### 实现基于Token的身份验证
为了实现基于Token的身份验证,可以采用JWT(JSON Web Token),这是一种广泛接受的标准,允许在各方之间安全传输信息作为JSON对象[^4]。
#### 创建和验证JWT令牌
下面展示了一个简单的例子来创建并验证JWT令牌:
```python
import jwt
from datetime import datetime, timedelta
SECRET_KEY = 'your_secret_key'
def create_token(user_id):
payload = {
'user_id': user_id,
'exp': datetime.utcnow() + timedelta(days=1),
'iat': datetime.utcnow()
}
token = jwt.encode(payload, SECRET_KEY, algorithm='HS256')
return token
def verify_token(token):
try:
decoded_payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
return True, decoded_payload['user_id']
except jwt.ExpiredSignatureError:
return False, "Expired signature"
except jwt.InvalidTokenError:
return False, "Invalid token"
```
此代码片段展示了如何编码一个包含用户ID的有效载荷以及解码接收到的令牌以提取相同的信息。请注意,在实际部署环境中应当更加严格地处理错误情况,并考虑加入更多字段到payload中以便更好地支持业务逻辑需求。
#### 设置Flask应用程序中的保护路由
当构建Web服务时,可能希望某些端点仅限于已认证用户的访问。这里提供了一种方法来设置受保护的API端点:
```python
from flask import Flask, request, jsonify
app = Flask(__name__)
@app.route('/protected', methods=['GET'])
def protected():
auth_header = request.headers.get('Authorization')
if not auth_header or not auth_header.startswith("Bearer "):
return jsonify({"message": "Missing Bearer token"}), 401
_, token = auth_header.split()
is_valid, message_or_user_id = verify_token(token)
if not is_valid:
return jsonify({"message": str(message_or_user_id)}), 401
# 如果到达此处,则表示身份验证成功
response_data = {"data": f"Welcome User ID: {message_or_user_id}"}
return jsonify(response_data)
if __name__ == '__main__':
app.run(debug=True)
```
上述示例说明了如何通过检查HTTP请求头中的`Authorization`字段来进行基本的身份验证流程。如果提供了有效的Bearer类型的授权凭证,则继续执行;否则拒绝访问[^3]。
阅读全文