6.9 KiB
6.9 KiB
Salesforce 策略模式登录数据库结构说明
元数据
- 需求编号:2026-01-21-003-02
- 创建时间:2026-01-22
- 创建人:SSOT 架构师
- 状态:已完成
数据库概述
Salesforce 策略模式登录功能不需要创建新的数据库表,登录信息会回写到已有的 datai_sf_system_config 表中(在子需求 2026-01-21-003-01 中已创建)。
已有表结构
datai_sf_system_config(Salesforce 系统配置表)
该表已在子需求 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 ID(Access Token) | 登录成功后回写 |
| server_url | VARCHAR(500) | 服务器 URL(Instance 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、用户信息、组织信息等回写到该表中。