APIPost传Token的5种方式详解:从基础到实战避坑指南

1次阅读
没有评论

共计 1487 个字符,预计需要花费 4 分钟才能阅读完成。

image.webp

背景痛点

在 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"
}

APIPost 传 Token 的 5 种方式详解:从基础到实战避坑指南

生产必须:启用 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 网关做协议转换

点击下载测试集合

正文完
 0
评论(没有评论)