datai/docs/sql/2026-01-21-003-02-salesforce-strategy-login-database.md

169 lines
6.9 KiB
Markdown
Raw Normal View History

2026-01-22 10:52:30 +08:00
# Salesforce 策略模式登录数据库结构说明
## 元数据
- 需求编号2026-01-21-003-02
- 创建时间2026-01-22
- 创建人SSOT 架构师
- 状态:已完成
## 数据库概述
Salesforce 策略模式登录功能不需要创建新的数据库表,登录信息会回写到已有的 `datai_sf_system_config` 表中(在子需求 2026-01-21-003-01 中已创建)。
## 已有表结构
### datai_sf_system_configSalesforce 系统配置表)
该表已在子需求 2026-01-21-003-01 中创建,包含以下字段:
| 字段名 | 类型 | 说明 | 登录功能使用 |
| ------ | ---- | ---- | ---- |
| id | BIGINT(20) | 主键ID | - |
| system_name | VARCHAR(100) | 系统名称(唯一) | 用于读取系统配置 |
| system_type | VARCHAR(50) | 系统类型(用户自定义) | - |
| org_type | CHAR(1) | 组织类型S=源 org T=目标 org | - |
| login_type | VARCHAR(20) | 登录类型oauth2/session_id/cli | 用于选择登录策略 |
| client_id | VARCHAR(255) | OAuth 客户端 ID | OAuth2 登录使用 |
| client_secret | VARCHAR(500) | OAuth 客户端密钥(加密存储) | OAuth2 登录使用 |
| username | VARCHAR(100) | 用户名 | OAuth2 Password 登录使用 |
| password | VARCHAR(500) | 密码(加密存储) | OAuth2 Password 登录使用 |
| security_token | VARCHAR(500) | 安全令牌(加密存储) | OAuth2 Password 登录使用 |
| session_id | VARCHAR(255) | Session IDAccess Token | 登录成功后回写 |
| server_url | VARCHAR(500) | 服务器 URLInstance URL | 登录成功后回写 |
| access_token | VARCHAR(255) | 访问令牌Session ID | 登录成功后回写 |
| refresh_token | VARCHAR(255) | 刷新令牌 | OAuth2 登录成功后回写 |
| token_expires_at | DATETIME | 令牌过期时间 | OAuth2 登录成功后回写 |
| sf_user_id | VARCHAR(100) | Salesforce 用户 ID用于缓存键 | 登录成功后回写 |
| user_id | VARCHAR(100) | 用户 ID | 登录成功后回写 |
| org_id | VARCHAR(100) | 组织 ID | 登录成功后回写 |
| org_name | VARCHAR(255) | 组织名称 | 登录成功后回写 |
| status | CHAR(1) | 状态0正常 1停用 | - |
| sort_order | INT(11) | 排序 | - |
| remark | VARCHAR(500) | 备注 | - |
| create_by | VARCHAR(64) | 创建者 | - |
| create_time | DATETIME | 创建时间 | - |
| update_by | VARCHAR(64) | 更新者 | - |
| update_time | DATETIME | 更新时间 | - |
## 数据流说明
### 登录流程数据流
```
登录流程数据流
├─ 1. 读取系统配置
│ └─ 从 datai_sf_system_config 表读取配置
│ ├─ 根据 system_name 查询配置
│ ├─ 获取 client_id、client_secret、username、password、security_token
│ └─ 使用 EncryptUtils 解密敏感信息
├─ 2. 执行登录
│ ├─ OAuth2 Password 登录
│ │ ├─ 调用 Salesforce OAuth2 API
│ │ ├─ 获取 access_token、refresh_token、instance_url、expires_at
│ │ └─ 调用 Identity API 获取用户信息
│ ├─ OAuth2 Client Credentials 登录
│ │ ├─ 调用 Salesforce OAuth2 API
│ │ ├─ 获取 access_token、refresh_token、instance_url、expires_at
│ │ └─ 调用 Identity API 获取用户信息
│ ├─ OAuth2 Authorization Code 登录
│ │ ├─ 调用 Salesforce OAuth2 API
│ │ ├─ 获取 access_token、refresh_token、instance_url、expires_at
│ │ └─ 调用 Identity API 获取用户信息
│ └─ Session ID 登录
│ ├─ 使用已有的 session_id 和 server_url
│ └─ 调用 Identity API 验证并获取用户信息
└─ 3. 回写登录信息
└─ 更新 datai_sf_system_config 表
├─ session_id: 访问令牌
├─ server_url: 实例 URL
├─ access_token: 访问令牌
├─ refresh_token: 刷新令牌(仅 OAuth2 登录)
├─ token_expires_at: 过期时间(仅 OAuth2 登录)
├─ sf_user_id: 用户 ID
├─ user_id: 用户名
├─ org_id: 组织 ID
├─ org_name: 组织名称
└─ update_time: 更新时间
```
### 刷新令牌流程数据流
```
刷新令牌流程数据流
├─ 1. 读取系统配置
│ └─ 从 datai_sf_system_config 表读取配置
│ ├─ 根据 system_name 查询配置
│ ├─ 获取 client_id、client_secret、refresh_token
│ └─ 使用 EncryptUtils 解密敏感信息
├─ 2. 执行刷新令牌
│ └─ 调用 Salesforce OAuth2 API
│ └─ 获取新的 access_token、refresh_token、instance_url、expires_at
└─ 3. 回写登录信息
└─ 更新 datai_sf_system_config 表
├─ session_id: 新的访问令牌
├─ server_url: 新的实例 URL
├─ access_token: 新的访问令牌
├─ refresh_token: 新的刷新令牌
├─ token_expires_at: 新的过期时间
└─ update_time: 更新时间
```
### 登出流程数据流
```
登出流程数据流
├─ 1. 读取系统配置
│ └─ 从 datai_sf_system_config 表读取配置
│ └─ 根据 system_name 查询配置
├─ 2. 执行登出
│ └─ 调用 Salesforce 登出 API
└─ 3. 清空登录信息
└─ 更新 datai_sf_system_config 表
├─ session_id: NULL
├─ server_url: NULL
├─ access_token: NULL
├─ refresh_token: NULL
├─ token_expires_at: NULL
└─ update_time: 更新时间
```
## 索引说明
### 已有索引
- 主键索引:`id`
- 唯一索引:`uk_system_name` (system_name)
- 普通索引:`idx_system_type` (system_type)
- 普通索引:`idx_org_type` (org_type)
- 普通索引:`idx_login_type` (login_type)
- 普通索引:`idx_status` (status)
- 普通索引:`idx_sf_user_id` (sf_user_id)
### 索引使用场景
- `uk_system_name`:用于根据系统名称快速查询配置
- `idx_login_type`:用于根据登录类型快速查询配置
- `idx_sf_user_id`:用于根据 Salesforce 用户 ID 快速查询配置(后续缓存优化使用)
## 数据安全
### 敏感信息加密
以下字段使用 `EncryptUtils` 加密存储:
- `client_secret`OAuth 客户端密钥
- `password`:密码
- `security_token`:安全令牌
### 加密流程
```
加密流程
├─ 存储时
│ └─ 使用 EncryptUtils.encrypt() 加密敏感信息
│ └─ 存储加密后的值到数据库
└─ 读取时
└─ 使用 EncryptUtils.decrypt() 解密敏感信息
└─ 获取原始值用于登录
```
## 总结
Salesforce 策略模式登录功能不需要创建新的数据库表,使用已有的 `datai_sf_system_config` 表存储登录信息。登录成功后,会将 Session ID、Server URL、用户信息、组织信息等回写到该表中。
## 相关文档
- [需求文档](../requirements/2026-01-21-003-02-salesforce-strategy-login.md)
- [设计文档](../design/2026-01-21-003-02-salesforce-strategy-login-design.md)
- [架构决策](../decisions/2026-01-21-003-02-ADR-salesforce-strategy-login.md)
- [系统配置表 SQL](../sql/2026-01-21-003-01-datai_sf_system_config.sql)