1. Token基础概念与核心原理
1.1 什么是Token及其核心作用
Token本质上是一个由服务器生成的加密字符串,作为客户端访问受限资源的凭证。在Web开发领域,它解决了传统Session-Cookie机制的几个痛点问题:
-
服务端存储压力:传统Session需要服务器存储用户状态信息,当用户量达到百万级时,对服务器内存和数据库都是巨大负担。而Token方案中,服务端只需签发和验证Token,无需存储会话状态。
-
跨域问题:Cookie受同源策略限制,而Token可以通过HTTP Header自由传递,完美支持跨域访问和微服务架构。
-
CSRF防护:由于不依赖Cookie,天然避免跨站请求伪造攻击。我在实际项目中曾遇到CSRF导致的数据篡改问题,改用Token后彻底解决了这类安全隐患。
关键理解:Token不是简单的随机字符串,而是包含用户身份信息(如user_id)、有效期等数据的签名凭证。常见的JWT(JSON Web Token)就是标准化实现方案。
1.2 Token工作流程详解
让我们通过一个电商平台的真实案例,拆解Token的完整生命周期:
-
用户登录阶段:
python复制# 用户提交凭证 auth_data = { "username": "shop_user", "password": "hashed_password" } response = requests.post('https://api.mall.com/auth', json=auth_data) # 服务端验证通过后生成Token token = jwt.encode( payload={ "user_id": 123, "exp": datetime.utcnow() + timedelta(hours=2) # 2小时有效期 }, key='SECRET_KEY', algorithm='HS256' ) return {"token": token} -
客户端存储策略:
- Web端:推荐存储在
localStorage或sessionStorage(注意XSS防护) - 移动端:使用安全存储模块(如Android的Keystore)
- 自动化测试:可临时写入配置文件
- Web端:推荐存储在
-
资源访问阶段:
python复制headers = { "Authorization": f"Bearer {token}", "Content-Type": "application/json" } response = requests.get('https://api.mall.com/orders', headers=headers) -
服务端验证流程:
python复制try: # 解码验证Token payload = jwt.decode(token, 'SECRET_KEY', algorithms=['HS256']) user = User.get(payload['user_id']) r
