Skip to content

认证与请求签名

不支持 Bearer 认证。每个 /v1 操作都必须带以下四个请求头;X-Sx-Actor 只是可选审计文本,绝不参与授权。

text
X-Sx-Key-Id: sxk_<16-32 位小写字母或数字>
X-Sx-Timestamp: <10 位 Unix 秒>
X-Sx-Nonce: <16-64 位 A-Za-z0-9_->
X-Sx-Signature: v1=<标准 base64>
X-Sx-Actor: <可选;清除控制字符并截到 128 位>

规范请求

严格用 LF(\n)连接七行,末尾不能有换行:

text
sx-v1
{大写 HTTP 方法}
{与实际发送完全一致的路径和查询串}
{KEY_ID}
{TIMESTAMP}
{NONCE}
{原始 body 字节的 SHA256 小写十六进制}

路径以 / 开头并包含查询串,必须与 HTTP 客户端实际发送的字节一致。无 body 时哈希空字节串(e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855)。body 只序列化一次,同一份字节用于签名和发送。

  • hmac-sha256:用发放的 secret 对规范 UTF-8 字符串做 HMAC-SHA256。
  • rsa2:使用至少 2048 位私钥做 SHA256withRSA(PKCS#1 v1.5)。

结果用标准 base64 编码并加 v1= 前缀。算法由服务端保存的签名材料决定,不由调用方请求头任选。

校验顺序

服务端依次执行 Redis 预认证限流、规范字段校验、±300 秒时间窗、凭据查询与验签,最后才在 Redis 占用 nonce。验签前,未知 key id、已退出材料和错误签名返回相同结果;签名有效后,已吊销、停用、过期、重放和来源 IP 不允许才返回各自的安全错误。

nonce 在接受窗口内必须唯一。服务端只生成一个 req.partnerCaller;认证后继续检查 workspace 存在性/类型和类型化 scope,缺少元数据时失败关闭。

OpenAPI 无法计算签名。其中四个 apiKey 声明只用于说明必需请求头;“try it out”不会产生有效调用。