mirror of
https://github.com/hpd840321/craftlabs-authorization-sdk.git
synced 2026-06-09 10:00:30 +08:00
76ff98db87
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
563 lines
27 KiB
Markdown
563 lines
27 KiB
Markdown
# 系统架构设计 — 全景图与组件清单
|
||
|
||
> **角色**:资深架构师视角的 **系统上下文、容器划分、逻辑组件、数据流与部署边界** 的单一汇总页。
|
||
> **读者**:研发、测试、运维、产品与集成方。
|
||
> **关联**:[工作区工程划分](./WORKSPACE_ENGINEERING_LAYOUT.md) · [并行迭代索引](./PARALLEL_ITERATION_INDEX.md) · [功能模块 M1–M11](../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[Maven:cn.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. 平台后端逻辑组件(领域视图)
|
||
|
||
与产品模块 **M1–M11** 对齐的 **逻辑分包**(实现可跨多 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: REST(Session / 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 | **CI:SDK Java** | 流水线 | `.github/workflows/ci-java.yml` | GitHub Actions | `java/` 构建与测试(JDK 版本以 workflow 为准)。 |
|
||
| C17 | **CI:Platform + 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 + 认证 + 日志脱敏** 即可满足多数早期场景。 |
|
||
| **安全重心** | **对外发布的 SDK(JAR + 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 | **RBAC(M11)**、**行级授权**(组织/客户维度)、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 / 企业 IdP(C20)** |
|
||
| 授权 | 每个 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) 的同步点更新版本号。
|