共计 1200 个字符,预计需要花费 3 分钟才能阅读完成。
什么是 Token?
Token 是一种轻量级的身份验证机制,通常用于无状态的 Web 应用和 API 服务中。它就像一个数字钥匙,允许用户在不需要每次请求都提供用户名和密码的情况下,访问受保护的资源。

常见 Token 方案对比
- JWT(JSON Web Token)
- 优点:自包含、跨语言支持、适合分布式系统
-
缺点:无法主动失效、payload 过大影响性能
-
OAuth2
- 优点:标准化流程、完善的授权机制
- 缺点:实现复杂、需要额外存储状态
Clawhub Token 核心机制
1. Token 生成
Clawhub Token 采用 JWT 标准,包含三个部分:Header、Payload 和 Signature。
import jwt
from datetime import datetime, timedelta
# 生成 Token 示例
SECRET_KEY = "your-very-secret-key"
def generate_token(user_id):
payload = {
'user_id': user_id,
'exp': datetime.utcnow() + timedelta(hours=1), # 1 小时后过期
'iat': datetime.utcnow() # 签发时间}
return jwt.encode(payload, SECRET_KEY, algorithm='HS256')
2. Token 验证
验证过程包括签名检查、过期时间验证和 payload 完整性校验。
def verify_token(token):
try:
payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
return payload
except jwt.ExpiredSignatureError:
logging.warning("Token 已过期")
raise
except jwt.InvalidTokenError:
logging.error("无效 Token")
raise
3. Token 刷新
采用双 Token 机制:access_token(短有效期) 和 refresh_token(长有效期)。
安全防护措施
- 算法选择
- HS256:对称加密,适合单体应用
-
RS256:非对称加密,更适合分布式系统
-
常见攻击防护
- CSRF:SameSite Cookie 属性
- 重放攻击:使用一次性 nonce
- 信息泄露:Payload 中不存敏感信息
生产环境避坑指南
- 密钥管理
- 不要硬编码密钥
- 定期轮换密钥
-
使用 KMS 等专业服务
-
日志记录
- 记录 Token 验证失败
-
但不记录完整 Token
-
性能优化
- 使用缓存验证结果
- 限制 Token 大小
思考题
- 如何实现 Token 的主动失效?
- 在微服务架构中,Token 验证如何避免成为性能瓶颈?
- Token 和 Session 的边界在哪里?什么情况下应该选择 Session?
在实际项目中,Token 安全是一个持续的过程,需要结合业务场景不断调整策略。希望本文能帮助你构建更安全的认证系统。
正文完
