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

169 lines
6.9 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.

# 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)