共计 1762 个字符,预计需要花费 5 分钟才能阅读完成。
开篇:从两个真实案例看 Token 传递的重要性
去年我们团队遇到过两次严重的 API 安全问题,都是由于 Token 传递不当导致的:

- 某电商平台将 Token 放在 URL 中,导致用户分享商品链接时无意中泄露了授权凭证,攻击者利用这些 Token 进行了大规模刷单
- 另一个金融 APP 因为没有设置 HttpOnly 标志,遭遇 XSS 攻击后用户 Cookie 中的 Token 被窃取,造成了资金损失
这些案例告诉我们,Token 传递看似简单,实则暗藏玄机。下面我就结合 APIPost 工具,详细介绍 5 种主流实现方式。
一、Header 传参:最推荐的标准方案
这是目前最安全、最规范的 Token 传递方式,符合 OAuth 2.0 规范。核心是在 HTTP 头中添加 Authorization 字段:
Authorization: Bearer your_token_here
Node.js 示例 :
// 服务器端验证
const jwt = require('jsonwebtoken');
app.get('/api/protected', (req, res) => {const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1]; // 提取 Bearer 后的 Token
if (!token) return res.sendStatus(401);
jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, user) => {if (err) return res.sendStatus(403);
req.user = user;
next();});
});
安全要点 :
- 必须使用 HTTPS 传输
- Token 前缀 Bearer 和实际 Token 之间要有空格
- 服务端要验证签名和过期时间
二、URL Query 参数:慎用的便捷方案
虽然这种方式实现简单:
GET /api/data?token=abc123
但存在严重安全隐患:
- Token 会出现在浏览器历史记录中
- 可能被第三方统计工具收集
- 容易通过 Referer 泄露
适用场景 :仅限临时调试或本地开发环境
三、Cookie 方式:需要特殊配置
通过 Set-Cookie 设置 Token 时,必须启用以下标记:
Set-Cookie: token=abc123; HttpOnly; Secure; SameSite=Strict
Python Flask 示例 :
from flask import make_response
@app.route('/login')
def login():
resp = make_response('Login success')
resp.set_cookie(
'token',
value=generate_token(),
httponly=True,
secure=True,
samesite='Strict'
)
return resp
四、Request Body 传参:RESTful 风格
适合 POST/PUT 请求,符合 RESTful 规范:
{
"token": "abc123",
"data": {}}
安全增强建议 :
- 对 Body 内容加密
- 配合时间戳防重放
五、OAuth2.0 完整流程
sequenceDiagram
Client->>+Auth Server: 请求授权
Auth Server-->>-Client: 返回授权码
Client->>+Auth Server: 用授权码换 Token
Auth Server-->>-Client: 返回 Access/Refresh Token
Client->>+Resource Server: 带 Token 访问 API
Resource Server-->>-Client: 返回数据
生产环境避坑指南
- Token 过期时间 :建议访问令牌 2 小时,刷新令牌 7 天
- 防重放攻击 :
- 每次请求带唯一 nonce
- 服务端缓存已使用的 nonce
- 分布式系统 :
- 使用 Redis 集中存储 Token
- 设置合理的淘汰策略
开放性问题思考
- 微服务架构中,可以考虑:
- 网关统一鉴权
- 使用透明的 JWT
- 服务网格 sidecar 代理
- JWT vs Session:
- JWT 无状态但难以撤销
- Session 更可控但需要存储
希望这些方案能帮助大家在 APIPost 中安全地传递 Token。每种方式都有其适用场景,关键是理解背后的安全考量。
正文完
