用途
Session Management 用于实现全面的会话管理系统,覆盖安全令牌处理、会话持久化、令牌刷新机制、正确的登出流程以及跨不同后端框架的 CSRF 防护。
何时使用
- 实现用户认证系统
- 管理会话状态与用户上下文
- 处理 JWT 令牌刷新周期
- 实现登出功能
- 防御 CSRF 攻击
- 管理会话过期与清理
主要能力
该技能提供以下参考指南(位于 references/ 目录):
- JWT Token Generation and Validation(JWT 令牌生成与验证)
- Node.js/Express JWT Implementation(Node.js/Express JWT 实现)
- Session Storage with Redis(使用 Redis 的会话存储)
- CSRF Protection(CSRF 防护)
- Session Middleware Chain(会话中间件链)
- Token Refresh Endpoint(令牌刷新端点)
- Session Cleanup and Maintenance(会话清理与维护)
使用方式
快速开始提供一个最小可运行示例(Python/Flask),展示 TokenManager 类,用于生成访问令牌与刷新令牌:
# Python/Flask Example
from flask import current_app
from datetime import datetime, timedelta
import jwt
import os
class TokenManager:
def __init__(self, secret_key=None):
self.secret_key = secret_key or os.getenv('JWT_SECRET')
self.algorithm = 'HS256'
self.access_token_expires_hours = 1
self.refresh_token_expires_days = 7
def generate_tokens(self, user_id, email, role='user'):
"""Generate both access and refresh tokens"""
now = datetime.utcnow()
# Access token
access_payload = {
'user_id': user_id,
'email': email,
'role': role,
'type': 'access',
'iat': now,
'exp': now + timedelta(hours=self.access_token_expires_hours)
// ... (see reference guides for full implementation)
完整实现请参见参考指南。
最佳实践
✅ 应该做:
- 所有会话传输使用 HTTPS
- 实现安全 Cookie(httpOnly、sameSite、secure 标志)
- 使用具有适当过期时间的 JWT
- 实现令牌刷新机制
- 安全存储刷新令牌
- 在每个请求上验证令牌
- 使用强密钥
- 实现会话超时
- 记录认证事件
- 登出时清除会话数据
- 对改变状态的请求使用 CSRF 令牌
❌ 不应做:
- 在令牌中存储敏感数据
- 使用过短的密钥
- 在 URL 中传输令牌
- 忽略令牌过期
- 跨环境复用令牌密钥
- 将令牌存储在 localStorage(应使用 httpOnly Cookie)
- 在没有 HTTPS 的情况下实现会话
- 忘记验证令牌签名
- 在日志中暴露会话 ID
- 使用可预测的会话 ID
适用场景与限制
该技能适用于需要用户认证与会话管理的后端服务,支持 Python/Flask 与 Node.js/Express 等框架,并涉及 Redis 会话存储。具体支持的框架范围、版本要求、依赖安装命令及完整代码实现,资料中暂未提供。