共计 1487 个字符,预计需要花费 4 分钟才能阅读完成。
背景痛点
在 API 开发中,Token 作为身份验证的核心凭证,其传递方式直接关系到系统安全性。常见问题包括:
- 明文传输:直接暴露在 URL 或日志中(如
?token=abc123) - CSRF 漏洞:使用 Cookie 时未正确设置 SameSite 属性
- 缓存污染:浏览器可能缓存含 Token 的 URL
- 跨域风险:CORS 配置不当导致 Token 被恶意站点获取
据 OWASP 报告,超过 60% 的 API 安全事件与 Token 处理不当有关。
技术方案对比
| 方式 | 安全性 | 缓存友好性 | 跨域支持 | 适用场景 |
|---|---|---|---|---|
| Header | ★★★★★ | ★★★★★ | ★★★★ | 主流方案,推荐默认使用 |
| Query Param | ★★ | ★ | ★★★★★ | 临时调试 / 特殊兼容场景 |
| Cookie | ★★★★ | ★★★★ | ★★ | 需要维持会话的 Web 应用 |
| Body | ★★★★ | ★★★★★ | ★★★ | POST/PUT 等非幂等请求 |
| OAuth2 | ★★★★★ | ★★★★★ | ★★★ | 第三方授权 / 开放平台 |
核心实现
1. Bearer Token in Header
// APIPost 请求头配置
headers: {
"Authorization": "Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"Content-Type": "application/json"
}

生产必须:启用 HTTPS + 设置
Strict-Transport-Security
2. JWT in URL 参数(危险!仅限特殊需求)
// APIPost URL 示例(实际应避免)`https://api.example.com/data?token=${encodeURIComponent(jwtToken)}`
必须添加:
Cache-Control: no-store+ 服务端短期 Token 有效期
3. HttpOnly Cookie 安全设置
// 服务端响应头示例
Set-Cookie:
token=encryptedValue;
HttpOnly;
Secure;
SameSite=Strict;
Max-Age=3600
安全增强方案
AES 加密传输示例
// 前端加密(需预共享密钥)import {AES} from 'crypto-js';
const encryptedToken = AES.encrypt(rawToken, secretKey).toString();
// APIPost Pre-request Script
pm.request.headers.add({
key: 'X-Encrypted-Token',
value: encryptedToken
});
防重放攻击校验
// 请求头添加时间戳 + 签名
headers: {"X-Timestamp": Date.now(),
"X-Signature": sha256(`token=${token}&t=${timestamp}&secret=salt`)
}
避坑指南
- 浏览器历史记录 :禁用 URL 传 Token,或用
<form method="POST">替代 GET - WebView 处理:Android 需设置
webView.clearCache(true),iOS 配置NSURLRequestReloadIgnoringCacheData - 日志过滤:Nginx 配置移除 Token 字段
log_format main '$remote_addr - $request_time [$time_local]' '$request_method $uri $status';
互动环节
思考题答案框架:
– Web 端:Cookie + CSRF Token 双重验证
– App 端:Authorization Header + 客户端证书绑定
– 统一方案:API 网关做协议转换
正文完
