跳转到主要内容

一、概述

本文档为接口对接方提供标准化的“登录获取Token、Token鉴权、请求加密、签名验证及响应解密”全流程操作规范,旨在保障接口数据传输的安全性与完整性。对接方无需关注服务端内部实现,仅需按照以下约定完成前置登录、请求构造与响应解析即可正常对接。 核心新增说明: 所有业务接口调用前需先通过登录接口获取有效Token,调用业务接口时需在请求头携带Token完成鉴权,加解密核心逻辑保持不变。

二、核心安全约定

2.1 加密与签名算法

签名 / 验签 RSA 非对称加密,哈希算法为 SHA-256,签名结果采用 Base64 编码传输 数据格式 业务数据统一使用 JSON 格式,编码需保留中文(禁用 Unicode 转义)

2.2 对接必备信息(需提前向我方获取)

三、前置操作:获取Token

所有业务接口调用前,必须先通过获取Token接口获取有效Token,Token作为后续业务请求的鉴权凭证。登录接口为普通HTTP接口,需加密,需携带基础身份信息完成校验。 3.1 获取token流程说明
  1. 对接方构造登录请求,携带我方分配的app-id;
  2. 调用我方登录接口,服务端校验身份信息有效性;
  3. 校验通过后,服务端返回有效Token(有效期24小时);
  4. 对接方缓存Token,后续业务请求时在请求头携带;
  5. Token过期后,需重新执行登录流程获取新Token

四、请求发送规范(对接方 → 我方)

对接方需按以下步骤构造请求,确保数据加密与签名有效:

4.1 步骤 1:准备原始业务数据

  • 构造 JSON 格式的业务参数(例:{"account":"admin","password":"abc123456"});
  • 编码要求:使用JSON_UNESCAPED_UNICODE(中文不转义),避免多余空格或格式化

4.2 步骤 2:生成请求签名(防篡改)

  1. 使用对接方自身的 RSA 私钥,对步骤 1 的原始 JSON 字符串进行 SHA-256 哈希签名;
  2. 将签名结果进行 Base64 编码,得到最终的签名串(记为sign)。 签名示例(伪代码python):
签名示例(PHP 代码):
生成请求签名(Java 代码)

4.3 步骤 3:加密业务数据(防泄露)

  1. 生成 16 字节的随机 IV 向量(每次请求需重新生成,不可固定);
  2. 使用 SM4-CBC 算法,以我方提供的SM4 对称密钥、生成的 IV 向量,对步骤 1 的原始 JSON 字符串进行加密(加密模式为 RAW 原始数据);
  3. 拼接 IV 向量与加密后的密文(格式:IV + 密文);
  4. 对拼接结果进行 Base64 编码,得到最终的请求体数据。
加密示例(伪代码 python):
加密示例(PHP 代码):
加密业务数据(Java 代码)

4.4 步骤 4:发送 HTTP 请求

请求头要求: 请求体要求:
  • 仅包含步骤 3 生成的 Base64 编码字符串(无需额外 JSON 包装)。
请求示例:

五、响应解析规范(我方 → 对接方)

我方返回的响应数据已加密并签名,对接方需按以下步骤解析:

5.1 步骤 1:Base64 解码响应体

  • 对我方返回的响应体字符串进行 Base64 解码,得到 IV + 密文 的原始字节数据。

5.2 步骤 2:SM4 解密数据

  1. 从解码后的字节数据中,截取前 16 字节作为 IV 向量;
  2. 剩余部分作为 SM4 密文;
  3. 使用SM4 对称密钥、截取的 IV 向量,对密文进行 SM4-CBC 解密,得到 JSON 格式的字符串(包含业务数据和签名)。
解密示例(伪代码 python):
解密示例(PHP 代码)
SM4 解密数据(Java 代码)

5.3 步骤 3:验证响应签名(防篡改)

  1. 从解密后的 JSON 数据中提取sign字段(我方生成的签名串,Base64 编码);
  2. 移除 JSON 数据中的sign字段,重新将剩余业务数据编码为 JSON 字符串(编码规则:JSON_UNESCAPED_UNICODE,无多余空格);
  3. 对提取的sign字段进行 Base64 解码,得到原始签名数据;
  4. 使用我方提供的服务端 RSA 公钥,对重新编码后的业务 JSON 字符串进行 SHA-256 签名验证;
  5. 验证通过则可使用业务数据,验证失败则丢弃该响应。
验签示例(伪代码 python):
验签示例(PHP 代码):
验证响应签名(Java 代码)

六、错误处理与排查

6.1 常见错误说明

6.2 对接前自查清单

  1. 已获取我方提供的app-id、SM4 对称密钥、服务端 RSA 公钥;
  2. 已向我方提供对接方自身的 RSA 公钥(用于请求验签);
  3. 签名生成时使用对接方私钥,验签时使用对应公钥(密钥对匹配);
  4. JSON 编码统一使用JSON_UNESCAPED_UNICODE,无格式化、无多余空格;
  5. SM4 加密时 IV 向量每次随机生成(16 字节),且按 “IV + 密文” 格式拼接;
  6. 所有 Base64 编码 / 解码使用标准格式(不使用 URL-Safe 变体)。

七、安全注意事项

  1. 密钥安全:
  • SM4 对称密钥和对接方 RSA 私钥需严格保密,禁止明文存储或传输;
  • 密钥需定期更换(更换时需双方同步更新)。
  1. 数据传输:
  • 建议接口使用 HTTPS 协议传输,进一步提升安全性;
  • 禁止在请求 / 响应中携带密钥、私钥等敏感信息。
  1. 签名与加密:
  • 每次请求必须重新生成签名和 IV 向量,不可复用;
  • 业务数据需完整参与签名(不可遗漏字段),避免部分数据未被验证。
  1. 异常处理:
  • 签名验证失败或解密失败时,需直接丢弃数据,不可继续使用;
  • 记录异常日志(如验签失败、解密失败),便于排查问题。

八、对接支持

若对接过程中遇到问题,可提供以下信息联系我方排查:
  1. 完整的请求头(隐去敏感信息);
  2. 加密后的请求体;
  3. 我方返回的响应体;
  4. 本地签名生成、加密 / 解密的关键代码片段(隐去密钥)。
最后修改于 2026年6月25日