feat: expand vehicle data platform capabilities

This commit is contained in:
lingniu
2026-07-27 16:46:15 +08:00
parent e3a1f80f86
commit 3c4bece72c
650 changed files with 62155 additions and 2552 deletions

View File

@@ -0,0 +1,118 @@
# OneOS 单点登录部署与验收手册
更新时间2026-07-24
## 1. 代码范围
| 系统 | 仓库/分支 | 交付内容 |
|---|---|---|
| OneOS 认证服务 | `/Users/lingniu/project/ai-coding/oneos/ln-cloud` / `dev-ssl-codex` | Ticket、introspection、防重放、Nacos 和菜单 SQL |
| OneOS Web | `/Users/lingniu/project/ai-coding/oneos/ln-one-os-web` / `dev-ssl-codex` | 受登录保护的车辆中台中转页 |
| 车辆数据中台 | `/Users/lingniu/project/ai-coding/lingniu-vehicle-ingest` | Ticket 兑换、账号/Scope 同步、本地会话、回调页 |
## 2. 生成密钥
分别生成两个不同的随机值,不要使用示例值,也不要提交到 Git
```bash
openssl rand -hex 32 # Service Token
openssl rand -hex 32 # HMAC Signing Secret
```
双边的 Service Token 必须一致,双边的 Signing Secret 必须一致。两种密钥不能互相复用。
## 3. OneOS 配置
`ruoyi-auth.yml` 对应 Nacos 环境发布:
```yaml
oneos:
vehicle-platform-sso:
enabled: true
callback-url: https://vehicle.example.com/auth/oneos/callback
service-token: ${实际 Service Token}
signing-secret: ${实际 Signing Secret}
audience: vehicle-platform
ticket-ttl-seconds: 60
clock-skew-seconds: 60
allowed-return-paths:
- /vehicles
- /monitor
- /tracks
- /statistics
```
`script/config/nacos/ruoyi-gateway.yml` 中新增的 introspection 白名单同步到对应环境。该白名单只跳过用户 Sa-Token 校验,接口自身仍强制校验 Service Token、HMAC、时间戳和 Request ID。
执行:
```text
script/sql/update/update_vehicle_platform_sso_20260724.sql
```
然后在 OneOS 角色管理中:
- 给允许进入中台的角色分配“车辆数据中台”,获得 `vehicle:platform:access`
- 仅给业务负责人角色分配“查看部门车辆”,获得 `vehicle:scope:department`
- 普通业务人员不要分配 `vehicle:scope:department`
## 4. 车辆数据中台配置
先执行中台迁移,至少包括:
```text
deploy/migrations/013_platform_identity_access.sql
deploy/migrations/039_oneos_business_user_scope.sql
```
设置环境变量:
```dotenv
AUTH_MODE=enforce
ONEOS_SSO_ENABLED=true
ONEOS_SSO_INTROSPECTION_URL=https://oneos.example.com/auth/inner/v1/sso/vehicle-platform/introspect
ONEOS_SSO_SERVICE_TOKEN=${与 OneOS 相同的 Service Token}
ONEOS_SSO_SIGNING_SECRET=${与 OneOS 相同的 Signing Secret}
ONEOS_SSO_AUDIENCE=vehicle-platform
ONEOS_SSO_DEFAULT_MENUS=vehicles
ONEOS_SSO_REQUEST_TIMEOUT_MS=3000
ONEOS_SSO_SESSION_TTL_MINUTES=30
```
中台会为 OneOS 用户即时创建或更新 `platform_user`,并事务更新:
- `platform_user_menu`
- `platform_user_business_scope`
- `platform_user_session`
- `platform_auth_audit`
OneOS 会话默认 30 分钟失效;用户可从 OneOS 菜单无感重新进入。这样角色或部门权限变更不会沿用本地 12 小时账号会话。
## 5. 权限验收
至少准备三个 OneOS 账号:
1. 业务一部负责人:有入口权限和部门权限;
2. 业务一部普通人员:只有入口权限;
3. 业务二部负责人:有入口权限和部门权限。
逐项验证:
- 三个账号从 OneOS 菜单进入时均不再次输入密码;
- 负责人只能看到其 `department_ids` 对应部门的车辆;
- 普通人员只能看到 `responsible_user_id = OneOS userId` 的车辆;
- 业务一部账号不能看到业务二部车辆;
- 部门、业务负责人、客户、状态多选只能缩小结果,不能越权扩大;
- 同一 Ticket 第二次兑换返回 401
- Ticket 超过 60 秒后兑换返回 401
- 修改 `audience`、HMAC、时间戳或 Request ID 后请求失败;
- 禁用入口权限后 OneOS 菜单消失,直接调用 Ticket 接口返回 403。
## 6. 回滚
按以下顺序回滚,已有中台本地账号不受影响:
1. 在 OneOS 角色中撤销“车辆数据中台”菜单;
2. 设置中台 `ONEOS_SSO_ENABLED=false` 并重启;
3. 设置 OneOS `oneos.vehicle-platform-sso.enabled=false`
4. 保留账号、Scope 和审计数据用于追溯,不执行破坏性删除。