wz-golang-server/frontend_payload_crypto_tas...

71 lines
2.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 前端工作清单:请求/响应参数加密对接
本文档用于前端工程师对接后端新增的“请求/响应参数加密”能力。
## 一、背景与目标
- 后端新增可配置的参数加密能力(默认关闭)。
- 当服务端开启时,前端需按约定对请求体进行加密,并能解密响应体。
## 二、开关与触发规则
- 只有当后端配置开启时才需要启用前端加密。
- 通过请求头 `X-App-Encrypt: 1` 标记本次请求体已加密。
- 如果后端开启“响应加密”,返回会带响应头 `X-App-Encrypt: 1`,响应体为加密载荷。
- 白名单路径(如 `/swagger/`)不会被加解密;前端无需处理。
## 三、加密协议与格式
- 加密算法AES-GCM。
- 密钥:后端配置 `payload_crypto.secret_key`,需与前端一致。
- 请求/响应体加密后的 JSON 结构:
```json
{ "nonce": "base64", "ciphertext": "base64" }
```
- `nonce` 为 AES-GCM 的随机随机数Base64`ciphertext` 为密文Base64
## 四、前端需要实现的功能
1. **请求加密**
- 当后端开启 `payload_crypto.request.enable` 时,对请求 JSON 体加密。
- 请求头添加 `X-App-Encrypt: 1`
- 发送的请求体替换为加密后的 JSON 结构(`nonce` + `ciphertext`)。
2. **响应解密**
- 如果响应头包含 `X-App-Encrypt: 1`,则对响应体解密。
- 解密后得到原始 JSON再进入业务处理流程。
3. **错误处理**
- 解密失败时要能捕获并上报(日志/埋点),避免页面卡死。
- 解密失败可提示“数据解析失败,请重试”。
4. **降级与兼容**
- 若响应体不是加密结构(未带头或非 JSON直接走原逻辑。
- 与后端保持兼容:后端若未开启加密,不应影响现有请求。
## 五、实现建议
- 统一封装在请求拦截器/响应拦截器层:
- WebAxios 拦截器。
- 小程序:封装 `wx.request` 统一处理。
- AES-GCM 需支持:
- Web: Web Crypto API`window.crypto.subtle`)。
- 小程序: 引入可用的 AES-GCM 实现库(需确认平台支持)。
- `nonce` 长度以 AES-GCM 要求为准(通常 12 字节)。
## 六、需要后端确认的信息
- `payload_crypto.secret_key` 的实际值(生产环境)。
- 是否强制 `payload_crypto.request.required`(如果强制,所有接口必须加密)。
- 哪些接口在白名单(默认 `/swagger/`)。
## 七、联调检查清单
- 请求体加密后,后端可以正常解析并返回业务数据。
- 响应解密后,数据结构与未加密时一致。
- 错误场景:
- 缺少 `X-App-Encrypt` 头且后端强制加密时应收到 400。
- 非 JSON 响应不应被尝试解密。