共计 1880 个字符,预计需要花费 5 分钟才能阅读完成。
什么是 API Token?
API Token 就像一把钥匙,用来证明你有权访问某个 API 服务。它通常是一串随机生成的字符,服务器通过验证这串字符来判断是否允许你的请求通过。

常见类型
- JWT (JSON Web Token):包含用户信息的自包含令牌,由三部分组成(头部、载荷、签名)
- OAuth Token:用于授权第三方应用访问用户数据的令牌
- Bearer Token:最简单的形式,就是纯字符串令牌
新手常踩的坑
刚开始使用 API Token 时,很容易犯这些错误:
- 把 Token 硬编码在代码里(然后不小心上传到 GitHub)
- 忘记处理 Token 过期的情况
- 把 Token 存在不安全的地方(比如浏览器的 localStorage)
- 使用 HTTP 而不是 HTTPS 传输 Token
如何安全生成 Token(Python 示例)
import secrets
import datetime
import jwt # 需要安装 PyJWT 库
# 生成安全的随机密钥
SECRET_KEY = secrets.token_urlsafe(32)
# 生成 JWT Token
def generate_token(user_id):
payload = {
'user_id': user_id,
'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1) # 1 小时后过期
}
return jwt.encode(payload, SECRET_KEY, algorithm='HS256')
# 示例使用
token = generate_token(123)
print(f"生成的 Token: {token}")
Token 验证流程
- 客户端在请求头中加入 Token:
Authorization: Bearer <your_token> - 服务器端验证流程:
from flask import request, jsonify
@app.route('/protected')
def protected():
auth_header = request.headers.get('Authorization')
if not auth_header or not auth_header.startswith('Bearer'):
return jsonify({'error': '未提供 Token'}), 401
token = auth_header.split(' ')[1]
try:
payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
user_id = payload['user_id']
# 验证通过,继续处理请求
return jsonify({'message': '访问成功', 'user_id': user_id})
except jwt.ExpiredSignatureError:
return jsonify({'error': 'Token 已过期'}), 401
except jwt.InvalidTokenError:
return jsonify({'error': '无效 Token'}), 401
安全存储方案比较
- Cookie (HttpOnly + Secure):
- 优点:防止 XSS 攻击
- 缺点:可能受 CSRF 攻击
- LocalStorage:
- 优点:易于使用
- 缺点:完全暴露给 JavaScript
- SessionStorage:
- 类似 LocalStorage,但标签页关闭后消失
推荐方案:对于 Web 应用,使用 HttpOnly + Secure 的 Cookie,并配合 CSRF Token。
生产环境建议
Token 过期和刷新
- 设置合理的过期时间(如 15-30 分钟)
- 实现刷新 Token 机制:
- 当访问 Token 过期时,使用刷新 Token 获取新 Token
- 刷新 Token 应该有更长的有效期(如 7 天)
- 刷新 Token 只能用于获取新 Token,不能直接访问 API
监控和限流
- 记录 Token 使用情况
- 实现速率限制(如每分钟最多 60 次请求)
- 监控异常模式(如大量失败的验证尝试)
防御措施
- 防 CSRF:
- 使用 SameSite Cookie 属性
-
要求重要操作提供 CSRF Token
-
防 XSS:
- 对所有用户输入进行转义
- 使用 Content Security Policy (CSP)
- 避免使用 eval() 等危险函数
延伸思考
- 如果你的 API 需要支持跨域请求(CORS),Token 管理方案需要做哪些调整?
- 在高并发系统中,如何设计分布式 Token 验证系统?
- 生物识别认证(如指纹、面部识别)如何与 Token 系统结合?
希望这篇指南能帮助你安全地使用 API Token。记住,安全是一个持续的过程,需要不断学习和更新知识。
正文完
