Files
huangping 76ff98db87 docs(i1): engineering index, parallel tracks, and product context
Add PARALLEL_ITERATION_INDEX, workspace layout, system architecture,
three-track execution packs, BPM/product references, and planned
service manifests. Supports I1 alignment across backend, web, and SDK.

Made-with: Cursor
2026-04-06 21:04:49 +08:00

563 lines
27 KiB
Markdown
Raw Permalink 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.
# 系统架构设计 — 全景图与组件清单
> **角色**:资深架构师视角的 **系统上下文、容器划分、逻辑组件、数据流与部署边界** 的单一汇总页。
> **读者**:研发、测试、运维、产品与集成方。
> **关联**[工作区工程划分](./WORKSPACE_ENGINEERING_LAYOUT.md) · [并行迭代索引](./PARALLEL_ITERATION_INDEX.md) · [功能模块 M1M11](../chuangfei-platform-product-modules.md) · [比特对接总览](../chuangfei-bitanswer-integration-platform.md) · [`engineering/workspace-manifest.json`](../../engineering/workspace-manifest.json)
> **安全专章**:本章 **§9**(含 **§9.0** 小团队阶段、**§9.8** SDK 发布完整性);与工作区 [WORKSPACE §10 安全边界](./WORKSPACE_ENGINEERING_LAYOUT.md) 互补。
---
## 1. 架构目标与原则
| 原则 | 说明 |
|------|------|
| **边界清晰** | **客户端授权运行时**SDK + Native + 现场进程)与 **商业交付平台**(Web + 双后端 + 数据持久化)在 **依赖、发布周期、classpath** 上严格分离。 |
| **契约先行** | 客户端配置以 **`schemas/craftlabs-auth-config.schema.json`** 为契约;Callback / OpenAPI 以 **文档与版本化契约** 对齐多轨迭代(见 [PARALLEL_ITERATION_INDEX](./PARALLEL_ITERATION_INDEX.md))。 |
| **可运维** | 每个可独立扩缩的后端服务 **一枚 Fat JAR**`spring-boot-maven-plugin` **repackage** 仅挂在启动模块);密钥与连接串 **不进** SDK 与示例仓库。 |
| **数据栈锁定** | 平台持久化:**PostgreSQL 15** + **MyBatis-Plus**(详见 [WORKSPACE_ENGINEERING_LAYOUT §9.1](./WORKSPACE_ENGINEERING_LAYOUT.md))。 |
| **安全默认** | **最小权限**、**纵深防御**、**可审计**;对外入口 **TLS**;敏感面(Webhook、管理 API、SN/许可数据)**单独威胁建模**与门禁。 |
| **阶段目标(创飞当前)** | **小团队**:优先 **功能与需求闭环**;并发与规模 **不高**。平台侧 **单/双 Fat JAR + 单机或少量 VM**`java -jar` 即可;**不将 K8s、云 KMS、服务网格** 作为现阶段必选项,待业务量与合规要求上升再演进。 **安全重心** 放在 **已发布 SDK 的完整性**(不易被 **替换、假冒**),见 **§9.0 / §9.8**。 |
---
## 2. 系统上下文(C4 Level 1
展示本体系与 **外部环境** 的关系:谁使用谁、谁回调谁。
```mermaid
flowchart TB
subgraph Actors["参与者"]
OPS[运维/管理员]
BIZ[商务/交付/License Ops]
DEV[客户侧研发]
end
subgraph CraftLabs["创飞侧系统(本方案范围)"]
UI[交付管理平台 Web UI]
API[交付平台 API]
WH[License Webhook Ingress]
DB[(PostgreSQL 15)]
end
subgraph ClientSite["客户现场 / 边缘环境"]
APP[客户业务应用]
SDK[CraftLabs 授权 SDK]
NAT[BitAnswer Native 库]
end
subgraph External["外部系统"]
BA[比特安索云 / 控制台]
end
OPS --> UI
BIZ --> UI
UI --> API
API --> DB
WH --> DB
WH -->|内部 HTTP / MQ 异步| API
BA -->|规则 Callback HTTPS POST| WH
SDK -->|Bit_Login / 许可 API| BA
APP --> SDK
SDK --> NAT
DEV -->|依赖 Maven 工件 + JSON 配置| SDK
DEV -.->|阅读 Schema/文档| CraftLabs
```
**读图要点**
- **比特** 只与 **Webhook**(服务端入站)和 **SDK**(客户端出站授权)发生 **不同方向** 的交互;平台 UI **不** 替代 SDK 完成现场授权。
- **SDK 不依赖** 平台 API 运行时;二者仅通过 **契约(Schema、文档、可选 OpenAPI 导出配置)** 弱耦合。
---
## 3. 容器架构(C4 Level 2
本工作区与规划仓库中的 **可构建、可部署或可分发单元**
```mermaid
flowchart TB
subgraph Browser["用户浏览器"]
SPA[Vue 3 SPA<br/>delivery-platform-ui]
end
subgraph DMZ["接入层(可选 Gateway"]
GW[API Gateway / 反向代理<br/>规划]
end
subgraph SimpleHost["机房或云主机(单机为主)"]
JAR_API[delivery-platform-api<br/>Fat JAR :8080]
JAR_WH[license-webhook-ingress<br/>Fat JAR :8081]
PG[(PostgreSQL 15)]
MQ[[消息队列<br/>可选·低并发可省]]
end
subgraph ArtifactRepo["制品与契约"]
MVN[Mavencn.craftlabs / cn.craftlabs.platform]
SCH[JSON Schema + examples]
NATIVE[各 OS Native 动态库]
end
subgraph CI["持续集成"]
WF_SDK[ci-java.yml]
WF_PLAT[ci-platform.yml]
end
SPA -->|HTTPS /api| JAR_API
GW -.-> JAR_API
GW -.-> JAR_WH
JAR_API --> PG
JAR_WH --> PG
JAR_WH -.-> MQ
MQ -.-> JAR_API
MVN --> APPX[客户应用构建]
SCH --> APPX
NATIVE --> APPX
WF_SDK --> MVN
WF_PLAT --> JAR_API
WF_PLAT --> JAR_WH
WF_PLAT --> SPA
```
**阶段说明(创飞当前)**:并发不高时 **可不部署 MQ**Webhook 直写库或由 API 轮询即可);后端以 **一台或两台云主机** 各跑 `java -jar …` 为主,**无需 K8s**。
| 容器 | 技术 / 形态 | 默认端口或产出 | 职责摘要 |
|------|-------------|----------------|----------|
| **delivery-platform-ui** | Vue 3 + Vite + Pinia + Element Plus | 静态资源 / dev server | 管理端 SPA:登录、领域页面、调用平台 REST。 |
| **delivery-platform-api** | Spring Boot 3.4.x(目标 4.0.x)、Security、Actuator、MyBatis-Plus | **8080**、Fat JAR | 领域 API、认证、M1–M11 业务能力、读写字段库。 |
| **license-webhook-ingress** | Spring Boot、Actuator | **8081**、Fat JAR | 比特 Callback 入站、验签/Token、快速 2xx、异步投递(表/MQ)。 |
| **PostgreSQL** | 15.x | 5432 | 平台主库;与 SDK **无** 直连。 |
| **SDK Java 模块** | 多模块 Maven**非** Spring Boot | 多枚 `craftlabs-auth-*.jar` | 配置模型、BitAnswer 桥接、自托管占位等。 |
| **Native** | CMake | `.so` / `.dylib` / `.dll` | 比特官方运行时绑定,随 SDK 版本发布。 |
| **schemas + examples** | JSON Schema、样例 JSON | 无进程 | 配置契约与集成样例。 |
---
## 4. 平台后端逻辑组件(领域视图)
与产品模块 **M1M11** 对齐的 **逻辑分包**(实现可跨多 Maven 模块,但边界应一致)。
```mermaid
flowchart LR
subgraph API["delivery-platform-api(逻辑)"]
M11[identity / platform M11]
M1[customer-project M1]
M2[contract M2]
M3[delivery M3]
M4[licensing SN M4]
M5[inbox callback M5]
M6[integration mapping M6]
M7[device M7]
M8[notification M8]
M9[reporting M9]
M10[audit M10]
PERS[persistence MyBatis-Plus]
end
M11 --> M1
M1 --> M2
M2 --> M3
M2 --> M4
M3 --> M4
M6 --> M4
M5 --> M4
M4 --> M7
M5 --> M8
M4 --> M9
M1 & M2 & M3 & M4 & M5 --> M10
M1 & M2 & M3 & M4 & M5 & M6 & M7 & M8 & M9 & M10 & M11 --> PERS
```
**Webhook 侧(license-webhook-ingress)逻辑组件**(精简):
| 组件 | 职责 |
|------|------|
| **Ingress Controller** | 接收 POST、限流与尺寸约束(规划加固)。 |
| **Token / 签名验证** | `x-bitanswer-token` 或约定头;与 `CRAFTLABS_WEBHOOK_EXPECTED_TOKEN` 等环境变量对齐。 |
| **幂等与投递** | `Idempotency-Key` 或 payload 内事件 ID;写入 **inbox****MQ**(I5+),由平台 API 消费。 |
| **观测** | Actuator、结构化日志、指标(与平台统一约定)。 |
---
## 5. 客户端 SDK 组件(本仓库 `java/` + `native/`
```mermaid
flowchart TB
subgraph SDK["CraftLabs Authorization SDK"]
CORE[craftlabs-auth-core<br/>配置 / NativeBridge / 校验]
BIT[craftlabs-auth-bitanswer<br/>Provider + loadLibrary]
SH[craftlabs-auth-selfhosted<br/>占位实现]
TST[craftlabs-auth-tests]
end
SCH2[schemas + examples]
JNI[libcraftlabs_auth_bitanswer]
CORE --> BIT
CORE --> SH
BIT --> JNI
TST --> CORE
SCH2 -.-> CORE
```
**硬约束**:平台服务端 **禁止** 依赖 `craftlabs-auth-bitanswer`**禁止** `System.loadLibrary("craftlabs_auth_bitanswer")`(见 [WORKSPACE §5](./WORKSPACE_ENGINEERING_LAYOUT.md))。
---
## 6. 关键运行时序
### 6.1 比特 Callback → 平台
```mermaid
sequenceDiagram
participant BA as 比特安索云
participant WH as license-webhook-ingress
participant Store as PG / MQ
participant API as delivery-platform-api
participant UI as 管理端 UI
BA->>WH: POST /webhook/bitanswer/callback
WH->>WH: 校验 Token / 幂等键
WH->>Store: 持久化或入队(异步)
WH-->>BA: 2xx 快速响应
API->>Store: 拉取 / 消费事件
UI->>API: 查询 Inbox / 处置状态
```
### 6.2 管理员使用平台
```mermaid
sequenceDiagram
participant U as 用户
participant UI as delivery-platform-ui
participant API as delivery-platform-api
participant DB as PostgreSQL 15
U->>UI: 登录 / 操作业务页
UI->>API: RESTSession / JWT 由迭代约定)
API->>DB: MyBatis-Plus 读写
API-->>UI: DTO / 错误码
```
### 6.3 客户现场授权(与平台解耦)
```mermaid
sequenceDiagram
participant APP as 客户应用
participant SDK as craftlabs-auth-*
participant NAT as Native
participant BA as 比特安索云
APP->>SDK: 初始化 + 加载配置 JSON
SDK->>SDK: Schema/规则校验(可选)
SDK->>NAT: JNI 调用
NAT->>BA: 许可 / 登录协议
BA-->>NAT: 授权结果
NAT-->>SDK: 回调结果
SDK-->>APP: 授权状态 / 特征项
```
---
## 7. 全量组件清单(Master Inventory
下表覆盖 **本工作区已实现或已占位** 的组件;规划项标注为 **(规划)**。
| ID | 组件名称 | 类型 | 路径 / 坐标 / 产物 | 技术栈 | 主要职责 |
|----|----------|------|-------------------|--------|----------|
| C01 | **craftlabs-auth-parent** | Maven 聚合 | `java/pom.xml` | Java 17 | SDK 父工程、依赖与模块编排。 |
| C02 | **craftlabs-auth-core** | Library JAR | `java/craftlabs-auth-core` | Java | 配置模型、`NativeBridge`、与 Schema 对齐的校验入口。 |
| C03 | **craftlabs-auth-bitanswer** | Library JAR | `java/craftlabs-auth-bitanswer` | Java + JNI | `BitAnswerProvider``System.loadLibrary`、**仅客户端**。 |
| C04 | **craftlabs-auth-selfhosted** | Library JAR | `java/craftlabs-auth-selfhosted` | Java | 自托管授权占位 / 扩展点。 |
| C05 | **craftlabs-auth-tests** | 测试模块 | `java/craftlabs-auth-tests` | JUnit 等 | SDK 侧集成与回归测试。 |
| C06 | **libcraftlabs_auth_bitanswer** | Native | `native/` | CMake | 各平台动态库,与 C02/C03 **同版本发布**。 |
| C07 | **craftlabs-auth-config Schema** | 契约 | `schemas/craftlabs-auth-config.schema.json` | JSON Schema Draft 2020-12 | 客户端配置 **单一契约**;CI 与 SDK 测试可对齐校验。 |
| C08 | **examples** | 样例 | `examples/` | JSON / 脚本 | 配置样例与烟测引用。 |
| C09 | **documentation** | 文档 | `docs/` | Markdown | 产品、对接、工程、架构。 |
| C10 | **engineering-meta** | 元数据 | `engineering/` | JSON / MD | `workspace-manifest.json`、planned 占位、README 索引。 |
| C11 | **craftlabs-platform-services-parent** | Maven 聚合 | `services/pom.xml` | Java 17 + Spring Boot 3.4.x | 平台后端父 POM**与 C01 分构建线**。 |
| C12 | **delivery-platform-api** | 可执行 Fat JAR | `services/delivery-platform-api` | Spring Web/Security/Actuator、MyBatis-Plus、PostgreSQL 驱动 | 平台 REST、领域逻辑(迭代扩展)、**8080**。 |
| C13 | **license-webhook-ingress** | 可执行 Fat JAR | `services/license-webhook-ingress` | Spring Web/Actuator | Callback 入站、Token、**8081**。 |
| C14 | **PostgreSQL** | 基础设施 | 部署环境 / `services/docker-compose.yml` | 15.x | 平台主数据存储。 |
| C15 | **delivery-platform-ui** | SPA | `web/delivery-platform-ui` | Vue 3、Vite、Pinia、vue-router、axios、Element Plus | 管理端界面;dev 代理 `/api` → API。 |
| C16 | **CISDK Java** | 流水线 | `.github/workflows/ci-java.yml` | GitHub Actions | `java/` 构建与测试(JDK 版本以 workflow 为准)。 |
| C17 | **CIPlatform + Web** | 流水线 | `.github/workflows/ci-platform.yml` | GitHub Actions | `services/` Maven verify + `web/` npm build。 |
| C18 | **API Gateway** | 接入(规划) | 未在本仓 | 待定 | 统一 TLS、路由、限流(可选)。 |
| C19 | **Message Queue** | 中间件(规划) | 未在本仓 | 待定 | Webhook 与 API 解耦、削峰(I5+ 常见形态)。 |
| C20 | **企业 IdP** | 身份(规划) | 未在本仓 | OIDC/SAML 等 | 与 M11 企业登录集成(若需)。 |
| C21 | **密钥与凭据** | 运维配置 | 部署机 | **环境变量**、**chmod 600 配置文件** | 注入 Webhook Token、DB 密码;**禁止** 进 Git**不强制** 云 KMS。 |
| C22 | **WAF / 边缘限流** | 安全(可选) | 边界 | 云 WAF 或 Nginx 限流模块 | 低并发阶段可省;对外暴露或合同要求时再上。 |
---
## 8. 技术栈总览
| 分层 | 选型 | 备注 |
|------|------|------|
| 管理端 | Vue 3、Vite、Pinia、vue-router、axios、Element Plus | 构建产物静态托管或 CDN。 |
| 平台 API | Spring Boot 3.4.x(路线图 4.0.x)、Spring Security、Actuator | Fat JAR 部署。 |
| Webhook | 同上(独立进程) | 与 API **进程隔离**,失败域分离。 |
| ORM | MyBatis-Plus`mybatis-plus-spring-boot3-starter` | Boot 4 时切换 `boot4-starter`。 |
| 数据库 | PostgreSQL 15 | 测试可用 H2 PG 模式或 Testcontainers。 |
| 客户端 SDK | Java 17、多模块薄 JAR | 不打 Spring Boot repackage。 |
| 客户端 Native | CMake、比特官方 API | 与 Java **同版本 tag**。 |
| 契约 | JSON Schema 2020-12 | `schemas/``examples/`。 |
---
## 9. 安全架构(授权与平台)
授权与许可数据直接影响 **商业履约与合规**,安全需求高于一般内部后台。本节给出 **信任边界、威胁面、控制措施与演进要求**,供架构评审与渗透测试对齐。
### 9.0 阶段与重心(广州创飞 · 小团队)
| 维度 | 当前立场 |
|------|----------|
| **部署** | **单 Fat JAR / 进程** 部署在云主机或内网服务器;PostgreSQL 可与应用 **同机或同 VPC 内另一台**;**不强制** 容器编排与云 KMS。 |
| **密钥** | Webhook Token、数据库密码等放在 **宿主机环境变量****权限受限的配置文件**`chmod 600`、仅运行用户可读),**绝不** 提交 Git。 |
| **优先级** | 先保证 **功能与需求闭环**;平台侧 **基础 TLS + 认证 + 日志脱敏** 即可满足多数早期场景。 |
| **安全重心** | **对外发布的 SDKJAR + Native**:防范 **供应链篡改与假冒制品****破解/逆向** 的硬防线主要在 **比特安索 Native 与许可密码学**Java 层需 **诚实评估**(见 **§9.8**)。 |
### 9.1 安全目标(CIA + 授权特有)
| 目标 | 含义 | 在本体系的落点 |
|------|------|----------------|
| **机密性** | 许可状态、SN、合同金额、Callback 原文、密钥不外泄 | TLS、日志脱敏、DB 访问控制、前端不持久化敏感令牌到不安全存储 |
| **完整性** | Callback 与台账不被篡改;配置与制品未被替换 | Webhook 验签/共享密钥、幂等键、审计日志(M10)、依赖与镜像签名(供应链) |
| **可用性** | 授权链路与管理端在约定 SLA 内可服务 | Webhook 快速 2xx + 异步处理;低并发阶段 **单机 + 健康检查** 即可,**不必** 预设 K8s 弹性扩容 |
| **不可否认性**(按需) | 关键操作可追溯 | 审计表、WORM 或日志外送(合规场景) |
### 9.2 信任边界
```mermaid
flowchart TB
subgraph Untrusted["不可信或半可信"]
Internet((Internet))
BA[比特云]
CustomerNet[客户现场网络]
Dev[集成方研发环境]
end
subgraph TrustHigh["高信任 — 创飞数据面"]
PG[(PostgreSQL)]
Secrets[(凭据:宿主机环境变量<br/>或受限配置文件)]
end
subgraph TrustMed["中信任 — 应用进程"]
API[delivery-platform-api]
WH[license-webhook-ingress]
end
subgraph TrustUser["用户终端"]
Browser[管理员浏览器]
ClientApp[客户业务进程 + SDK]
end
Internet -->|TLS 仅| WH
Internet -->|TLS 仅| API
Internet --> Browser
BA -->|HTTPS Callback| WH
CustomerNet --> ClientApp
Dev -.->|Maven/文档| ClientApp
Browser -->|HTTPS + 会话/JWT| API
ClientApp -->|TLS 至比特/自托管| BA
WH --> PG
API --> PG
API --> Secrets
WH --> Secrets
```
**边界规则**
- **Webhook URL** 暴露在公网或 DMZ:视为 **持续被扫描**;必须 **TLS + 强认证 + 限流 + 最小响应体**
- **管理端 API**:仅对 **已认证主体** 开放业务写能力;**禁止** 将平台账号用于客户现场 SDK。
- **SDK 配置 JSON**:含 `bitanswer.url``applicationData`、特征映射等,属 **客户环境机密**;**不得** 回传至创飞平台作为默认遥测(除非单独签署数据处理协议并做脱敏设计)。
### 9.3 威胁面与缓解(摘要)
| 威胁 | 示例 | 架构层缓解 |
|------|------|------------|
| **伪造 Callback** | 攻击者 POST 恶意 payload | **共享密钥**(如 `x-bitanswer-token``CRAFTLABS_WEBHOOK_EXPECTED_TOKEN` 常量时间比较);**比特官方 IP/证书钉扎**(若文档支持);**payload 大小与 JSON 深度限制** |
| **重放** | 重复投递同一事件污染台账 | **幂等键**`Idempotency-Key` / 事件 ID)+ 唯一约束;重复返回成功语义 |
| **撞库 / 会话窃取** | 管理端弱口令、Token 泄露 | **密码策略 / MFA(规划)**、**HttpOnly + Secure Cookie** 或 **短期 JWT + 刷新**、**CORS 严格白名单** |
| **越权** | 用户访问他人合同或 SN | **RBACM11**、**行级授权**(组织/客户维度)、API **资源级鉴权** |
| **注入** | SQL / 反序列化 | **参数化查询**MyBatis `#{}`)、**禁用不安全的反序列化 gadget**、DTO 白名单 |
| **SSRF**(若存在出站拉取) | 服务端替用户请求内网 | **出站 URL 白名单**、**禁用 file://**、独立网络分区 |
| **供应链 / 假冒 SDK** | 第三方镜像站替换 JAR、客户误下「绿色版」 | **官方唯一分发渠道** + **GPG/SHA-256 校验**(§9.8);Maven 依赖 **锁定版本**CI **依赖漏洞扫描**(力所能及) |
| **日志泄露** | Callback 原文、Token 打日志 | **结构化日志字段脱敏**、**禁止 debug 打印完整 Authorization** |
### 9.4 分组件控制要求
#### 9.4.1 `license-webhook-ingress`
| 控制项 | 要求 |
|--------|------|
| 传输 | **仅 HTTPS**;HTTP 仅允许本机健康检查(若必须)且不得承载业务 |
| 认证 | 配置 `CRAFTLABS_WEBHOOK_EXPECTED_TOKEN`**强制校验** `x-bitanswer-token`(或比特约定头);生产 **禁止** 长期关闭校验 |
| 处理 | **先校验后解析大对象**;限制 body 大小;超时快速失败仍返回约定错误码(避免资源耗尽) |
| 观测 | 日志记录 **事件 ID、幂等键、结果码**;**不** 记录完整密钥与完整 payload(或脱敏后) |
| 网络 | 云厂商 **安全组** 仅开放 443/业务端口;数据库 **不对公网**;单机阶段 **本机回环或内网 IP** 连库即可 |
#### 9.4.2 `delivery-platform-api`
| 控制项 | 要求 |
|--------|------|
| 认证 | I1 演示账号 **不得用于生产**;生产至少 **强口令**;团队具备条件时再上 **MFA / 企业 IdPC20** |
| 授权 | 每个 mutating 接口 **显式角色/权限**;与 M11 角色矩阵一致 |
| 数据 | DB 账号 **最小权限**(读写分离账号可选);连接串来自 **环境变量或宿主机配置**,禁止提交仓库 |
| Actuator | **生产关闭或仅本机访问** `env``heapdump``health` 可给 **本机监控脚本或 Nginx 探活** |
| CORS | **显式允许源**,禁用 `*` 携带凭证 |
#### 9.4.3 `delivery-platform-ui`
| 控制项 | 要求 |
|--------|------|
| 存储 | **不** 将 refresh token 写入 `localStorage`(优先 HttpOnly Cookie 或安全内存策略) |
| CSP | 生产启用 **Content-Security-Policy**,限制内联脚本与未知域 |
| 依赖 | `npm audit` 纳入 CI;锁定 lockfile |
#### 9.4.4 客户端 SDK 与 Native
| 控制项 | 要求 |
|--------|------|
| 配置 | `craftlabs-auth-config`**宿主应用** 安全加载(文件权限、必要时磁盘加密);**禁止** 将含敏感字段的示例提交到客户代码库模板 |
| 完整性 | Native **与 JAR 同版本** 分发;**正式发布** 必须带 **校验与/或签名**(见 **§9.8** |
| 运行时 | **不信任** 客户进程内存防护;敏感字符串尽量 **缩短生命周期**(比特 SDK 能力范围内) |
#### 9.4.5 PostgreSQL
| 控制项 | 要求 |
|--------|------|
| 网络 | DB **不暴露公网**;仅应用子网可达 |
| 加密 | 云盘默认加密或宿主机全盘加密即可;敏感列 **应用层加密** 为可选增强 |
| 审计 | 高危 DML/DDL 与 **管理员账号** 变更记入 M10 或 DB 审计扩展 |
### 9.5 与时序对齐的安全步骤(示意)
**Callback(补充安全步骤)**
```mermaid
sequenceDiagram
participant BA as 比特安索云
participant WH as Webhook
participant Store as PG/MQ
BA->>WH: TLS + POST
WH->>WH: TLS 终结校验(mTLS 仅在高合规客户场景考虑)
WH->>WH: 校验 Token(常量时间)
WH->>WH: 限制 body 大小 + 解析
WH->>WH: 幂等键去重
WH->>Store: 写入 inbox(脱敏日志)
WH-->>BA: 2xx
```
**管理端(补充安全步骤)**
```mermaid
sequenceDiagram
participant U as 用户
participant UI as SPA
participant API as Platform API
U->>UI: 登录
UI->>API: HTTPS + CSRF 防护(Cookie 模式)
API->>API: 认证 + 颁发会话/JWT
UI->>API: 业务请求 + 凭证
API->>API: 鉴权(角色 + 资源)
API-->>UI: 最小必要 DTO
```
### 9.6 合规与审计衔接
- **M10 审计与合规**:登录、合同变更、SN 绑定/解绑、Callback 处置、权限变更等 **必须** 产生不可抵赖审计记录(谁、何时、对象 ID、前后摘要)。
- **数据出境**:若 Callback 或日志含个人信息,需对齐 **个人信息保护法** 与客户 DPA。
- **渗透测试**:有对外暴露或合同要求时,对 **Webhook****管理 API** 做专项测试(认证绕过、IDOR、批量枚举);小团队可 **采购外包渗透** 或分阶段补做。
### 9.7 架构评审安全清单(节选)
- [ ] Webhook 生产环境 **已启用** 共享密钥或更强机制(签名/HMAC 以比特文档为准)。
- [ ] 管理 API **无** 默认弱口令路径;Actuator 敏感端点 **已收敛**
- [ ] 平台与 Webhook **未引入** `craftlabs-auth-bitanswer`
- [ ] 日志与异常栈 **无** 明文数据库密码、Token、完整 Callback。
- [ ] OpenAPI 中 **错误码** 不泄露内部堆栈或枚举用户存在性(登录接口需谨慎)。
- [ ] `examples/config/*.json` **无** 真实生产 URL/密钥(仅占位)。
- [ ] **SDK 发布**:每个对外版本具备 **SHA-256 清单****强烈建议** GPG 签名与 **唯一官方下载说明**
- [ ] **SDK 发布**`java``native` **同 tag**CHANGELOG 与交付说明 **可追溯**
### 9.8 SDK 发布完整性(当前安全重心)
客户侧 **Java 字节码可被反编译**,单靠混淆无法对抗动机足够的攻击者。**真正承担许可与密码学校验的**,应是 **比特安索 Native 与云端许可体系**。创飞 SDK 的安全目标应定位为:
1. **防篡改、防假冒**:客户拿到的是 **官方构建** 的 JAR/Native,未被中间人替换。
2. **防版本错配**JAR 与 `.so/.dylib/.dll` **同一次发布**(同 Git tag / 同一 Release 页),避免「新 JAR + 旧库」导致异常或绕过路径。
3. **可追溯**:出问题能对照 **确切版本与校验和** 复现。
| 措施 | 说明 | 小团队可执行性 |
|------|------|------------------|
| **官方唯一渠道** | 仅通过 **公司控制的 Maven 私服 / GitHub Release / 合同交付包** 分发;**禁止** 引导客户从匿名网盘、论坛下载「整合包」。 | 必做 |
| **SHA-256 清单** | 每个 Release 发布 `SHA256SUMS`;仓库内 **`scripts/sdk-release-checksums.sh`** 已落地,说明见 **`java/RELEASING.md`**;客户用 `sha256sum -c` / `shasum -a 256 -c` 校验。 | 必做 |
| **GPG 签名** | Maven**`mvn -f java/pom.xml -Prelease-sign verify`**`maven-gpg-plugin`,各 JAR 旁生成 `.asc`);清单文件:`SIGN=1` 跑上述脚本生成 `SHA256SUMS.asc`。公布 **公钥指纹** 固定页。 | 强烈建议 |
| **Git Tag = 发布单元** | `java/``native/` **同一 tag** 打发布;CHANGELOG 写清 **兼容的比特 SDK 版本**。 | 必做 |
| **依赖锁定** | 客户工程使用 **明确版本号** 或 BOM;避免「浮动版本」被投毒依赖间接替换。 | 建议 |
| **ProGuard 等混淆** | 仅增加逆向成本,**不能**替代 Native 侧安全;若上,只作 **非关键路径** 的辅助手段。 | 可选 |
| **法务条款** | 许可协议中约定 **禁止反编译、再分发**(民事约束,与技术防护互补)。 | 建议 |
**客户集成检查清单(可印在交付文档)**
- [ ] JAR/Native 均来自 **创飞官方渠道**,并已核对 **SHA-256**(或验签)。
- [ ] 各工件版本号 **一致**,与发布说明中的 **比特依赖版本** 一致。
- [ ] 未混入第三方「破解补丁」或修改版 `libcraftlabs_auth_bitanswer`
---
## 10. 部署与网络(简图)
```mermaid
flowchart TB
subgraph Public["公网 / 比特侧可达"]
BA[比特 Callback 出口 IP]
end
subgraph Perimeter["边界(常为一台 Nginx/Caddy"]
LB[TLS 终结 + 反代]
end
subgraph AppTier["应用层(单机或双机 java -jar"]
WH_P[Webhook Fat JAR]
API_P[Platform API Fat JAR]
UI_S[静态 UI 或同机 Nginx 托管]
end
subgraph DataTier["数据层"]
PG_P[PostgreSQL 15<br/>单实例或云托管]
end
BA --> LB --> WH_P
Users((管理员浏览器)) --> LB --> UI_S
Users --> LB --> API_P
WH_P --> PG_P
API_P --> PG_P
```
**阶段注记(创飞当前)****不依赖 K8s**;扩容以 **加机器 + 多实例反代** 即可。**安全注记**:云安全组 **收紧**PG **仅内网**WAF/mTLS **按合同与预算** 选装,非 MVP 必选。
---
## 11. 修订记录
| 日期 | 说明 |
|------|------|
| 2026-04-06 | 初版:系统上下文、容器、领域与 SDK 组件图、时序、全量组件表、技术栈与部署简图。 |
| 2026-04-06 | **§9 安全架构**:信任边界、威胁与缓解、分组件控制、安全时序、合规与评审清单;原则表增加 **安全默认**;部署节增加安全注记。 |
| 2026-04-06 | **对齐小团队**:§1 **阶段目标**、§3 单机部署说明、§9.0、凭据改为宿主机配置、部署图改为 `java -jar` + Nginx;新增 **§9.8 SDK 发布完整性**(防篡改/假冒重心)。 |
---
**下一步**:领域表结构、OpenAPI 与事件 Schema 建议单独维护为 **版本化契约仓库**`contracts/` 子模块,并在 [PARALLEL_ITERATION_INDEX](./PARALLEL_ITERATION_INDEX.md) 的同步点更新版本号。