跳到主内容
大鹏云 大鹏云 DAPENG CLOUD
首页 · 帮助中心 · API 开发文档 · API 开发者文档(二):鉴权说明与签名算法

API 开发者文档(二):鉴权说明与签名算法

鉴权方式概述

开放平台采用「Access Key + Secret + HMAC-SHA256 签名」方式鉴权,不使用 OAuth。每个密钥归属于一个客户账号,只能访问该客户的数据。

密钥获取方式

  1. 登录大鹏云会员中心。
  2. 进入「账户设置 / API 密钥」页面。
  3. 点击「创建密钥」,填写密钥名称,按需勾选权限范围、填写 IP 白名单、设置过期时间。
  4. 创建成功后会展示一次 Access Key 与 Secret。Secret 仅明文显示这一次,关闭页面后无法再次查看,请立即保存到安全的凭据管理系统。
要素格式说明
Access KeyAKID + 24 位大写十六进制公开标识,可出现在请求头中,用于定位密钥记录。
Secret64 位小写十六进制(32 字节随机数)绝密信息,仅用于本地计算签名,不得随请求发送。服务端只保存其 SHA-256 哈希。
权限范围逗号分隔的 scope 列表,或 *不勾选任何范围时保存为 *(全部范围)。实际可用范围仍受接口上线情况限制。
IP 白名单逗号分隔的 IPv4 地址,如 203.0.113.10,198.51.100.7留空表示不限制来源 IP。填写后仅白名单内的 IP 可调用。
过期时间日期时间,如 2027-12-31 23:59:59留空表示永不过期。到期后密钥自动失效,可重新创建。
安全要求:Secret 泄露等同于账号数据被读取。禁止将 Secret 写入前端 JS、App 安装包、Git 仓库或工单截图。若怀疑泄露,请立即在会员中心吊销该密钥并重新创建。

签名生成算法

服务端校验签名时使用的 HMAC 密钥是 Secret 的 SHA-256 十六进制哈希值,而不是 Secret 原文。请严格按以下四步生成:

第 1 步:准备签名密钥

signing_key = SHA256_HEX(secret)        // 64 位小写十六进制字符串

第 2 步:拼接待签名字符串

payload = timestamp + "\n" + raw_body
组成说明
timestamp当前 Unix 时间戳(秒),必须与请求头 X-Timestamp 完全一致。服务端允许 ±300 秒误差。
换行符固定为单个 \n(LF,ASCII 0x0A),前后不要添加空格。
raw_body请求体的原始字节。GET 请求无请求体时按空字符串处理,此时 payload 为 timestamp + "\n"。

第 3 步:计算 HMAC

signature = HMAC_SHA256(key = signing_key, message = payload)   // 输出 64 位小写十六进制

第 4 步:放入请求头

X-Access-Key: AKID8F2C4A91B7D34E6F0A1C2B3D
X-Timestamp:  1761000000
X-Signature:  4f8b2c...(64 位小写十六进制)
必须使用原始请求体签名:如果先构造 JSON、签名,再用不同方式重新序列化发送(键顺序变化、空格变化、中文被转义),服务端会对不上签名。请坚持「先序列化为最终字节 → 对这段字节签名 → 原样发送这段字节」。
易错点正确做法
用 Secret 原文做 HMAC 密钥必须先用 SHA-256 计算 Secret 的十六进制哈希,再作为 HMAC 密钥。
用发送前的时间重新取时间戳签名使用的 timestamp 必须与 X-Timestamp 一模一样。
GET 请求漏签名空 bodyGET 无 body 时,payload 仍为 timestamp + "\n",不可省略换行符。
签名大写十六进制统一使用小写十六进制;服务端按字符串精确比较。

请求头规范

请求头必填说明
X-Access-Key是Access Key,用于定位密钥记录。
X-Timestamp是Unix 时间戳(秒),与签名使用的值一致,允许 ±300 秒偏差。
X-Signature是HMAC-SHA256 签名结果,64 位小写十六进制。
Content-Type写请求必填推荐 application/json; charset=utf-8;也可使用 application/x-www-form-urlencoded。
Accept否固定返回 JSON,无需特殊设置。

服务端会依次校验:三个请求头是否齐全 → 时间戳窗口 → 密钥是否存在 → 密钥状态与有效期 → IP 白名单 → 签名 → 限流 → 权限范围(scope)。任一步失败即返回对应错误码,不会进入业务处理。

鉴权失败处理

HTTPerror.code典型 message处理建议
401missing_headersMissing required headers: X-Access-Key / X-Timestamp / X-Signature补齐三个请求头后重试。
401auth_failed请求已过期(时间戳不在 ±5 分钟窗口内)校准服务器时间(建议启用 NTP),重新生成时间戳与签名。
401auth_failedAccess Key 不存在 / 签名验证失败核对 Access Key 与 Secret 是否属于同一密钥;核对签名密钥是否为 Secret 的 SHA-256。
403auth_failed密钥已禁用或已过期在会员中心查看密钥状态,必要时重新创建。
403auth_failed当前 IP 不在白名单内将出口公网 IP 加入白名单,或清空白名单改为不限。
403forbidden_scopeThis API key does not have permission to call order.create在会员中心为该密钥勾选对应权限范围(或改为全部范围)。

说明:鉴权类失败的 error.code 统一为 auth_failed,具体原因体现在 message 中;HTTP 状态码用于区分「身份未通过」(401)与「身份已识别但无权访问」(403)。

这篇文章对你有帮助吗?