githubEdit

认证机制

本文档详细介绍 Zanbara API 的认证机制,包括 API Key 生成、JWT Token 获取、请求签名算法以及安全最佳实践。

认证概述

Zanbara API 使用两层认证机制:

  1. JWT Token 认证 (必需): 用于验证用户身份

  2. HMAC-SHA256 签名 (可选): 用于防止请求篡改和重放攻击

所有私有 API 端点都需要有效的 JWT Token。对于高安全性要求的场景 (如提现操作),还需要额外的请求签名验证。

认证流程图

┌─────────────┐
│  生成 API   │
│  Key/Secret │
└──────┬──────┘


┌─────────────┐
│ 请求 JWT    │
│   Token     │
└──────┬──────┘


┌─────────────┐
│ 使用 Token  │
│  调用 API   │
└──────┬──────┘


┌─────────────┐
│ (可选) 签名 │
│   请求      │
└─────────────┘

第一步: 生成 API Key

在网页端生成

  1. 登录 Zanbara 账户: https://zanbarax.com

  2. 访问 "账户设置" → "API 管理"

  3. 点击 "创建 API Key"

  4. 设置 API Key 权限和备注

权限选项:

  • 只读: 仅能查询账户、订单、仓位信息

  • 交易: 可以下单、撤单、调整仓位

  • 提现: 可以发起提现请求 (需要额外验证)

  1. (可选) 配置 IP 白名单

  2. 点击 "确认创建"

保存 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 已被禁用或删除

处理建议:

  1. 检查 Token 是否过期,如果过期则重新获取

  2. 确认 Authorization 头格式为 Bearer {token}

  3. 确认 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

  • 请求体格式不一致 (空格、换行等)

调试建议:

  1. 打印待签名字符串,确认格式正确

  2. 确认时间戳单位为毫秒

  3. 确认请求体 JSON 格式与签名时一致 (不含额外空格)

  4. 使用测试端点验证签名算法

安全最佳实践

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 泄露:

  1. 立即在网页端禁用该 Key

  2. 创建新的 API Key

  3. 更新应用程序配置

  4. 检查账户异常活动

7. 使用 HTTPS

所有 API 请求必须使用 HTTPS:

8. 实现请求重放保护

使用 client_order_id 防止订单重复:

9. 限制 Token 作用域

如果可能,为不同环境使用不同的 API Key:

故障排查

问题 1: "Invalid API Key"

原因:

  • API Key 格式错误

  • API Key 已被删除或禁用

  • 使用了测试环境 Key 访问生产环境

解决方法:

  1. 检查 API Key 格式: pk_{env}_{32_hex_chars}

  2. 在网页端确认 Key 状态

  3. 确认环境匹配 (test/live)

问题 2: "Token Expired"

原因:

  • JWT Token 超过 1 小时有效期

解决方法:

问题 3: "Timestamp Out of Range"

原因:

  • 本地时钟与服务器时间相差超过 5 秒

解决方法:

问题 4: "Signature Verification Failed"

原因:

  • 签名算法实现错误

  • 请求体被修改

  • 时间戳不匹配

解决方法:

  1. 打印待签名字符串,对比预期格式

  2. 确认签名和请求使用相同的 body

  3. 确认时间戳一致

测试工具

签名测试端点

Zanbara 提供签名测试端点,用于验证签名算法:

请求:

响应:

Postman Collection

我们提供预配置的 Postman Collection,包含签名脚本:

下载 Postman Collectionarrow-up-right

相关文档


文档版本: v1.0.0 最后更新: 2025-10-07 维护: Zanbara API Team

Last updated