认证机制
本文档详细介绍 Zanbara API 的认证机制,包括 API Key 生成、JWT Token 获取、请求签名算法以及安全最佳实践。
认证概述
Zanbara API 使用两层认证机制:
JWT Token 认证 (必需): 用于验证用户身份
HMAC-SHA256 签名 (可选): 用于防止请求篡改和重放攻击
所有私有 API 端点都需要有效的 JWT Token。对于高安全性要求的场景 (如提现操作),还需要额外的请求签名验证。
认证流程图
┌─────────────┐
│ 生成 API │
│ Key/Secret │
└──────┬──────┘
│
▼
┌─────────────┐
│ 请求 JWT │
│ Token │
└──────┬──────┘
│
▼
┌─────────────┐
│ 使用 Token │
│ 调用 API │
└──────┬──────┘
│
▼
┌─────────────┐
│ (可选) 签名 │
│ 请求 │
└─────────────┘第一步: 生成 API Key
在网页端生成
登录 Zanbara 账户: https://zanbarax.com
访问 "账户设置" → "API 管理"
点击 "创建 API Key"
设置 API Key 权限和备注
权限选项:
只读: 仅能查询账户、订单、仓位信息
交易: 可以下单、撤单、调整仓位
提现: 可以发起提现请求 (需要额外验证)
(可选) 配置 IP 白名单
点击 "确认创建"
保存 API 凭证
创建成功后,您将看到:
重要提示:
API Secret 仅在创建时显示一次,请务必妥善保存
如果遗失 Secret,需要删除旧 Key 并创建新的
切勿将 Secret 提交到版本控制系统或公开仓库
API Key 格式
env: 环境标识live- 生产环境test- 测试环境
后续为十六进制字符串
第二步: 获取 JWT Token
使用 API Key 和 Secret 向认证端点请求 JWT Token。
端点信息
请求参数
请求示例
cURL
JavaScript
Python
Rust
响应格式
字段说明:
token: JWT Token 字符串expires_in: Token 有效期 (秒),默认 3600 (1 小时)token_type: Token 类型,固定为 "Bearer"
JWT Token 结构
Zanbara 使用标准 JWT (RFC 7519) 格式:
Header:
Payload:
Token 刷新
Token 有效期为 1 小时。建议在 Token 过期前主动刷新:
第三步: 使用 Token 调用 API
在所有私有 API 请求中,通过 Authorization 请求头传递 JWT Token。
请求头格式
示例: 查询账户余额
示例: 创建订单
认证失败处理
当 Token 无效、过期或缺失时,API 返回 401 Unauthorized:
常见原因:
Token 已过期
Token 签名无效
Authorization 头格式错误
API Key 已被禁用或删除
处理建议:
检查 Token 是否过期,如果过期则重新获取
确认 Authorization 头格式为
Bearer {token}确认 API Key 状态正常
请求签名 (高级安全)
对于高安全性要求的操作 (如提现),Zanbara 支持 HMAC-SHA256 请求签名。
何时需要签名
以下操作必须包含签名:
提现请求 (
POST /v1/account/withdraw)修改 API Key 权限
删除 API Key
其他操作签名为可选,但强烈推荐用于:
所有交易操作 (下单、撤单)
修改杠杆、保证金模式
批量操作
签名算法
步骤 1: 构造待签名字符串
timestamp: 当前 Unix 时间戳 (毫秒)method: HTTP 方法,大写 (GET, POST, DELETE 等)path: API 路径,包括查询参数body: 请求体 JSON 字符串 (GET 请求为空字符串)
示例:
对于请求:
待签名字符串:
步骤 2: 使用 HMAC-SHA256 签名
使用 API Secret 作为密钥,对待签名字符串进行 HMAC-SHA256 签名:
步骤 3: 将签名转换为十六进制字符串
签名请求头
代码示例
JavaScript
Python
Rust
签名验证失败
当签名验证失败时,API 返回 401 Unauthorized:
常见原因:
时间戳与服务器时间相差超过 5 秒
签名字符串构造错误
使用错误的 API Secret
请求体格式不一致 (空格、换行等)
调试建议:
打印待签名字符串,确认格式正确
确认时间戳单位为毫秒
确认请求体 JSON 格式与签名时一致 (不含额外空格)
使用测试端点验证签名算法
安全最佳实践
1. 保护 API 凭证
推荐做法:
避免做法:
2. 使用不同权限的 API Key
3. 配置 IP 白名单
在 API Key 设置中限制允许的 IP 地址:
4. 定期轮换 API Key
建议每 90 天轮换一次 API Key:
5. 监控 API Key 使用
定期检查 API Key 使用日志:
异常 IP 访问
异常时间段活动
失败请求激增
6. 及时吊销泄露的 Key
如果怀疑 API Key 泄露:
立即在网页端禁用该 Key
创建新的 API Key
更新应用程序配置
检查账户异常活动
7. 使用 HTTPS
所有 API 请求必须使用 HTTPS:
8. 实现请求重放保护
使用 client_order_id 防止订单重复:
9. 限制 Token 作用域
如果可能,为不同环境使用不同的 API Key:
故障排查
问题 1: "Invalid API Key"
原因:
API Key 格式错误
API Key 已被删除或禁用
使用了测试环境 Key 访问生产环境
解决方法:
检查 API Key 格式:
pk_{env}_{32_hex_chars}在网页端确认 Key 状态
确认环境匹配 (test/live)
问题 2: "Token Expired"
原因:
JWT Token 超过 1 小时有效期
解决方法:
问题 3: "Timestamp Out of Range"
原因:
本地时钟与服务器时间相差超过 5 秒
解决方法:
问题 4: "Signature Verification Failed"
原因:
签名算法实现错误
请求体被修改
时间戳不匹配
解决方法:
打印待签名字符串,对比预期格式
确认签名和请求使用相同的 body
确认时间戳一致
测试工具
签名测试端点
Zanbara 提供签名测试端点,用于验证签名算法:
请求:
响应:
Postman Collection
我们提供预配置的 Postman Collection,包含签名脚本:
相关文档
文档版本: v1.0.0 最后更新: 2025-10-07 维护: Zanbara API Team
Last updated