共计 1612 个字符,预计需要花费 5 分钟才能阅读完成。
为什么我们需要自动管理 Token
每次手工复制粘贴 Token 的日子该结束了。想象这些场景:凌晨 2 点发现测试脚本失败,只因 Token 过期;团队协作时有人忘了更新共享文档里的 Token;性能测试时因 Token 失效导致 1000 次请求全部报 401… 这些正是我们迫切需要自动化 Token 管理的原因。

三种 Token 携带方式对比
1. Header 传参(推荐)
- 格式:
Authorization: Bearer your_token - 优势:符合 HTTP 标准,不会被记录到日志
- 场景:RESTful API、OAuth2.0
2. Query 参数
- 示例:
/api/data?token=xxx - 注意:会暴露在浏览器历史记录和服务器日志
- 场景:临时调试、简易鉴权
3. Body 传参
- 示例:
{"auth": { "token": "xxx"} } - 限制:仅适用于 POST/PUT 请求
- 场景:GraphQL 等非标准鉴权
OAuth2.0 vs JWT:
– OAuth2.0 是授权框架,需要回调获取 Token
– JWT 是自包含令牌,可直接解析有效期
手把手配置 Apifox 环境
- 进入项目设置 → 环境变量
- 新增变量
API_TOKEN,值留空 - 在「预请求脚本」标签页粘贴:
// 获取新 Token 的异步函数
const refreshToken = async () => {
const response = await pm.sendRequest({
url: 'https://api.example.com/auth',
method: 'POST',
body: {
mode: 'raw',
raw: JSON.stringify({key: pm.environment.get('CLIENT_SECRET')
})
}
});
// 解析响应并设置环境变量
const {access_token, expires_in} = response.json();
pm.environment.set('API_TOKEN', access_token);
// 计算过期时间(注意单位是秒)const expiryDate = new Date();
expiryDate.setSeconds(expiryDate.getSeconds() + expires_in - 30); // 预留 30 秒缓冲
pm.environment.set('TOKEN_EXPIRY', expiryDate.toISOString());
};
// 检查 Token 是否过期
const tokenExpiry = new Date(pm.environment.get('TOKEN_EXPIRY') || 0);
if (new Date() >= tokenExpiry) {await refreshToken();
}
生产环境必备技巧
安全存储方案
- 敏感变量(如 CLIENT_SECRET)设置为「私有变量」
- 开启 Apifox 的项目密码保护功能
- 定期轮换测试环境 Token
并发测试优化
- 在「测试集合」中启用「共享 Cookie」
- 使用
pm.variables.replaceIn()动态注入 Token - 设置合理的 QPS 限制(建议≤5 次 / 秒)
新手避坑指南
- 时间单位混淆
- 问题:JWT 的 exp 是秒,但 Date.now()返回毫秒
-
解决:比较时统一除以 1000
-
Token 编码问题
- 问题:Base64URL 格式的 JWT 包含特殊字符
-
解决:用
encodeURIComponent()处理 -
环境变量覆盖
- 问题:多环境切换时变量未生效
- 解决:检查变量作用域优先级(环境 > 项目 > 全局)
实践任务:优化鉴权流程
挑战目标:
为你的 API 实现双重认证流程:
1. 先用 API Key 获取短期 Token
2. 用该 Token 获取最终访问令牌
提示步骤:
1. 创建两个环境变量:TEMP_TOKEN和FINAL_TOKEN
2. 编写分阶段预请求脚本
3. 添加异常处理逻辑(try-catch 块)
完成后,你会发现原本需要 5 分钟的手动操作,现在只需点击一次 ”Send” 就能自动完成全流程。这就是自动化带来的效率革命!
正文完
