Table of Contents

18.6 握手流程

握手地址:

POST /tieup/api/v1/security/handshake
Content-Type: text/plain

APP 完整请求头示例:

X-App-Channel: main
X-App-Platform: android
X-App-Version: 1.0.1
X-App-Build: 10001
X-Device-Id: 52e44b7d-6ac3-4ed4-a1df-7555b81d40aa

H5 不发送版本头也可握手:

X-App-Channel: h5-main
X-App-Platform: h5
X-Device-Id: web-7b4b19bd-9ad2-45ae-9498-cf52d764d254

握手步骤:

  1. 按平台取得当前 32 字节握手密钥。
  2. 使用 request 方向的握手 AAD 加密 data={} 的载荷。
  3. 将最终 Base64URL 信封作为纯文本 body 发送;握手请求不带 X-Session-Id
  4. 读取明文 JSON 外壳中的 data.encrypted_payload
  5. 使用同一握手密钥和 response 方向的握手 AAD 解密响应信封。
  6. 保存 session_idexpires_at;将 session_key Base64URL 解码为 32 字节业务密钥。

握手成功响应外壳:

{
  "code": 200,
  "message": "握手成功",
  "data": {
    "encrypted_payload": "<Base64URL信封>"
  }
}

encrypted_payload 解密后:

{
  "session_id": "tieup_sess_0123456789abcdef0123456789abcdef",
  "session_key": "<32个随机字节的Base64URL无填充字符串>",
  "expires_at": 1786896000
}

握手必须使用独立 HTTP 客户端或显式跳过业务加密拦截器,避免握手递归触发自身。客户端可在 expires_at 前主动刷新,也必须处理服务端提前清理 Session 的情况。