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
握手步骤:
- 按平台取得当前 32 字节握手密钥。
- 使用
request方向的握手 AAD 加密data={}的载荷。 - 将最终 Base64URL 信封作为纯文本 body 发送;握手请求不带
X-Session-Id。 - 读取明文 JSON 外壳中的
data.encrypted_payload。 - 使用同一握手密钥和
response方向的握手 AAD 解密响应信封。 - 保存
session_id、expires_at;将session_keyBase64URL 解码为 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 的情况。