17 KiB
17 KiB
Salesforce 策略模式登录需求
元数据
- 需求编号:2026-01-21-003-02
- 父需求编号:2026-01-21-003
- 创建时间:2026-01-21
- 创建人:SSOT 架构师
- 状态:待开始
- 优先级:高
需求概述
使用策略模式实现不同类型的 Salesforce 系统登录,用户通过页面选择登录策略。支持 OAuth2 登录策略(最简单模式)、Session ID 登录策略(最简单模式)、Salesforce CLI 登录策略、Legacy Credential 登录策略(传统账密凭证),支持扩展新的登录策略(预留接口)。OAuth2 登录支持三种授权流程:密码流程(password)、客户端凭证流程(client_credentials)、授权码流程(authorization_code)。Session ID 登录使用已有的 Salesforce Session ID 进行登录,通过 Identity API 验证 Session ID 并获取用户信息。Legacy Credential 登录使用 SOAP API 进行传统账密凭证登录。Salesforce CLI 登录通过 Salesforce CLI 命令行工具获取 Session 信息。登录策略工厂使用工厂方法模式进行依赖注入。
目标
- 策略模式实现:使用策略模式实现不同类型的 Salesforce 系统登录
- 用户选择策略:用户通过页面选择登录策略
- OAuth2 登录:支持 OAuth2 登录策略(最简单模式)
- Session ID 登录:支持 Session ID 登录策略(最简单模式)
- Salesforce CLI 登录:支持 Salesforce CLI 登录策略
- Legacy Credential 登录:支持 Legacy Credential 登录策略(传统账密凭证)
- 扩展性:支持扩展新的登录策略(预留接口)
- OAuth2 授权流程:OAuth2 登录支持三种授权流程
- Session ID 验证:Session ID 登录通过 Identity API 验证 Session ID 并获取用户信息
- Legacy Credential SOAP:Legacy Credential 登录使用 SOAP API
- Salesforce CLI 命令:Salesforce CLI 登录通过命令行工具获取 Session
- 工厂方法模式:登录策略工厂使用工厂方法模式进行依赖注入
业务上下文
当前问题
- 缺乏对不同类型 Salesforce 系统登录的支持
- 缺乏策略模式实现登录方式
- 缺乏用户选择登录策略的功能
业务场景
Salesforce 策略模式登录
├─ 策略模式实现不同登录方式
├─ 用户通过页面选择登录策略
├─ OAuth2 登录(最简单模式)
│ ├─ 支持密码流程(password)
│ ├─ 支持客户端凭证流程(client_credentials)
│ ├─ 支持授权码流程(authorization_code)
│ ├─ 支持刷新 Session
│ └─ 支持登出操作
├─ Session ID 登录(最简单模式)
│ ├─ 使用已有的 Salesforce Session ID 进行登录
│ ├─ 通过 Identity API 验证 Session ID
│ ├─ 支持登出操作
│ └─ 不支持刷新 Session
├─ Salesforce CLI 登录
│ ├─ 通过 Salesforce CLI 命令行工具获取 Session
│ ├─ 支持组织别名(org_alias)
│ ├─ 支持刷新 Session(重新获取)
│ └─ 支持登出操作
└─ Legacy Credential 登录(传统账密凭证)
├─ 使用 SOAP API 进行登录
├─ 支持用户名、密码、安全令牌
├─ 不支持刷新 Session
└─ 支持登出操作
应用场景
- 灵活登录:用户可以选择不同的登录策略进行登录
- OAuth2 登录:使用 OAuth2 方式登录 Salesforce
- Session ID 登录:使用已有的 Session ID 快速登录 Salesforce
- Salesforce CLI 登录:使用 Salesforce CLI 命令行工具获取 Session
- Legacy Credential 登录:使用传统账密凭证方式登录 Salesforce
功能需求
核心功能
功能 1:策略模式实现
- 描述:使用策略模式实现不同类型的 Salesforce 系统登录
- 验收标准:
- 定义登录策略接口(LoginStrategy)
- 实现 OAuth2 登录策略(OAuth2LoginStrategy)
- 实现 Session ID 登录策略(SessionIdLoginStrategy)
- 实现 Salesforce CLI 登录策略(SalesforceCliLoginStrategy)
- 实现 Legacy Credential 登录策略(LegacyCredentialLoginStrategy)
- 支持扩展新的登录策略(预留接口)
- 策略接口包含 login、refreshToken、logout、getLoginType 方法
- 优先级:高
- 依赖关系:依赖多系统配置功能(2026-01-21-003-01)
功能 2:登录策略工厂
- 描述:登录策略工厂使用工厂方法模式进行依赖注入
- 验收标准:
- 创建登录策略工厂(LoginStrategyFactory)
- 使用工厂方法模式进行依赖注入
- 根据登录类型返回对应的策略实例
- 支持获取所有支持的登录类型
- 支持动态注册新的登录策略
- 优先级:高
- 依赖关系:依赖策略模式实现功能
功能 3:OAuth2 登录
- 描述:支持 OAuth2 登录策略(最简单模式)
- 验收标准:
- 支持密码流程(password)
- 支持客户端凭证流程(client_credentials)
- 支持授权码流程(authorization_code)
- 支持刷新 Session
- 支持登出操作
- 登录成功后返回 Session ID(Access Token)、Server URL(Instance URL)、用户信息、组织信息
- 登录失败时返回错误信息
- 支持自定义登录 URL(login_url)
- 授权码流程支持 state 参数(防止 CSRF 攻击)
- 优先级:高
- 依赖关系:依赖登录策略工厂功能
功能 4:Session ID 登录
- 描述:支持 Session ID 登录策略(最简单模式)
- 验收标准:
- 使用已有的 Salesforce Session ID 进行登录
- 通过 Identity API 验证 Session ID
- 获取用户信息
- 支持登出操作
- 不支持刷新 Session
- 登录成功后返回 Session ID、Server URL、用户信息、组织信息
- 登录失败时返回错误信息
- 优先级:高
- 依赖关系:依赖登录策略工厂功能
功能 5:Salesforce CLI 登录
- 描述:支持 Salesforce CLI 登录策略
- 验收标准:
- 通过 Salesforce CLI 命令行工具获取 Session
- 支持组织别名(org_alias)参数
- 支持刷新 Session(重新获取)
- 支持登出操作
- 登录成功后返回 Session ID、Instance URL、用户信息、组织信息
- 登录失败时返回错误信息
- 检查 Salesforce CLI 是否已安装
- 优先级:高
- 依赖关系:依赖登录策略工厂功能
功能 6:Legacy Credential 登录
- 描述:支持 Legacy Credential 登录策略(传统账密凭证)
- 验收标准:
- 使用 SOAP API 进行登录
- 支持用户名、密码、安全令牌参数
- 不支持刷新 Session
- 支持登出操作
- 登录成功后返回 Session ID、Server URL、用户信息、组织信息
- 登录失败时返回错误信息
- 支持自定义登录 URL(login_url)
- 提供友好的错误消息(中文)
- 优先级:高
- 依赖关系:依赖登录策略工厂功能
功能 7:用户选择登录策略
- 描述:用户通过页面选择登录策略
- 验收标准:
- 提供登录策略选择界面
- 显示所有支持的登录策略
- 用户选择登录策略后执行登录
- 根据选择的策略显示对应的登录表单
- OAuth2 登录表单包含 login_url、client_id、client_secret、grant_type、username、password、security_token、code、state
- Session ID 登录表单包含 login_url、session_id、server_url
- Salesforce CLI 登录表单包含 org_alias
- Legacy Credential 登录表单包含 login_url、username、password、security_token
- 优先级:高
- 依赖关系:依赖登录策略工厂功能
功能 8:配置回写
- 描述:登录成功后回写 SF 返回的信息到系统配置表
- 验收标准:
- 回写 Session ID(Access Token,由 Salesforce 登录后返回)
- 回写 Server URL(Instance URL)
- 回写用户信息(用户 ID、用户名等)
- 回写组织信息(组织 ID、组织名称等)
- 回写访问令牌(Access Token)
- 支持定时刷新令牌(OAuth2 登录支持)
- 优先级:高
- 依赖关系:依赖 OAuth2 登录功能、Session ID 登录功能
非功能需求
性能需求
- 登录时间:登录响应时间 < 3 秒
- 并发用户数:支持 100+ 并发用户
安全需求
- 认证方式:使用现有的 Spring Security 认证机制
- 数据安全:登录过程中的敏感信息使用 HTTPS 传输
可用性需求
- 系统可用性:99.9%
- 容错机制:登录失败时自动重试
可维护性需求
- 代码可读性:代码符合项目编码规范,注释完整
- 测试覆盖率:单元测试覆盖率 ≥ 80%
数据需求
数据模型
datai_sf_system_config(Salesforce 系统配置表)
datai_sf_system_config (Salesforce 系统配置表)
├─ id (BIGINT) - 主键ID
├─ system_name (VARCHAR) - 系统名称(唯一)
├─ system_type (VARCHAR) - 系统类型(用户自定义)
├─ org_type (VARCHAR) - 组织类型(S=源 org T=目标 org ST=源和目标 org,可同时选中)
├─ login_type (VARCHAR) - 登录类型(oauth2/session_id/cli/legacy_credential)
├─ login_url (VARCHAR) - 登录 URL(如 https://login.salesforce.com)
├─ client_id (VARCHAR) - OAuth 客户端 ID
├─ client_secret (VARCHAR) - OAuth 客户端密钥(使用 EncryptUtils 加密存储)
├─ grant_type (VARCHAR) - OAuth 授权类型(password/client_credentials/authorization_code)
├─ username (VARCHAR) - 用户名
├─ password (VARCHAR) - 密码(使用 EncryptUtils 加密存储)
├─ security_token (VARCHAR) - 安全令牌(使用 EncryptUtils 加密存储)
├─ session_id (VARCHAR) - Session ID(由 Salesforce 登录后返回)
├─ server_url (VARCHAR) - 服务器 URL(Instance URL)
├─ refresh_token (VARCHAR) - 刷新令牌
├─ token_expires_at (DATETIME) - 令牌过期时间
├─ org_alias (VARCHAR) - Salesforce CLI 组织别名
├─ private_key_path (VARCHAR) - 私有密钥路径
├─ private_key_password (VARCHAR) - 私有密钥密码(使用 EncryptUtils 加密存储)
├─ code (VARCHAR) - OAuth 授权码
├─ state (VARCHAR) - OAuth state 参数,用于防止 CSRF 攻击
├─ sf_user_id (VARCHAR) - Salesforce 用户 ID(由 Salesforce 登录后返回)
├─ user_id (VARCHAR) - 用户 ID(由 Salesforce 登录后返回)
├─ org_id (VARCHAR) - 组织 ID(由 Salesforce 登录后返回)
├─ org_name (VARCHAR) - 组织名称(由 Salesforce 登录后返回)
├─ status (CHAR) - 状态(0正常 1停用)
├─ sort_order (INT) - 排序
├─ create_by (VARCHAR) - 创建者
├─ create_time (DATETIME) - 创建时间
├─ update_by (VARCHAR) - 更新者
└─ update_time (DATETIME) - 更新时间
数据存储需求
- 数据库类型:MySQL 8.3.0
- 存储容量:单表支持 1000 万+ 数据
- 数据备份策略:每日备份,保留 7 天
数据流转需求
登录认证
└─ 读取系统配置
└─ 使用 EncryptUtils 解密敏感信息
└─ 用户通过页面选择登录策略
└─ 根据登录类型选择对应的策略(OAuth2/Session ID/Salesforce CLI/Legacy Credential)
└─ OAuth2 登录支持三种授权流程:
├─ 密码流程(password)
├─ 客户端凭证流程(client_credentials)
└─ 授权码流程(authorization_code)
└─ Session ID 登录使用已有的 Salesforce Session ID 进行登录
└─ Session ID 登录通过 Identity API 验证 Session ID 并获取用户信息
└─ Salesforce CLI 登录通过命令行工具获取 Session
└─ Legacy Credential 登录使用 SOAP API 进行传统账密凭证登录
└─ Session ID 由 Salesforce 登录后返回
└─ 回写 SF 返回信息到系统配置
业务规则
- 用户选择登录策略:用户通过在页面上选择对应的登录策略
- Session ID 获取方式:Session ID 由 Salesforce 登录后返回给到
- Access Token 等同 Session ID:对于 Salesforce 来说,Access Token 就是 Session ID,两者是同一个概念
- OAuth2 登录支持:OAuth2 登录支持三种授权流程(password、client_credentials、authorization_code)
- OAuth2 刷新 Session:OAuth2 登录支持刷新 Session
- OAuth2 登出:OAuth2 登录支持登出操作
- OAuth2 自定义登录 URL:OAuth2 登录支持自定义登录 URL(login_url)
- OAuth2 state 参数:授权码流程必须使用 state 参数防止 CSRF 攻击
- Session ID 登录验证:Session ID 登录通过 Identity API 验证 Session ID 并获取用户信息
- Session ID 登出不支持刷新:Session ID 登录不支持刷新 Session
- Session ID 登出:Session ID 登录支持登出操作
- Salesforce CLI 登录:Salesforce CLI 登录通过命令行工具获取 Session
- Salesforce CLI 组织别名:Salesforce CLI 登录支持组织别名(org_alias)参数
- Salesforce CLI 刷新 Session:Salesforce CLI 登录支持刷新 Session(重新获取)
- Salesforce CLI 登出:Salesforce CLI 登录支持登出操作
- Legacy Credential 登录:Legacy Credential 登录使用 SOAP API 进行传统账密凭证登录
- Legacy Credential 不支持刷新:Legacy Credential 登录不支持刷新 Session
- Legacy Credential 登出:Legacy Credential 登录支持登出操作
- Legacy Credential 自定义登录 URL:Legacy Credential 登录支持自定义登录 URL(login_url)
- Legacy Credential 错误消息:Legacy Credential 登录提供友好的中文错误消息
- 配置回写:登录成功后必须回写 SF 返回的信息
接口需求
登录接口
-
OAuth2 登录
- 接口路径:POST /api/salesforce/auth/oauth2/login
- 请求参数:
- 通用参数:
login_url(可选):登录 URL(如 https://login.salesforce.com)grant_type(必填):授权流程类型(password/client_credentials/authorization_code)system_id(必填):系统配置 ID
- 密码流程(password):
client_id(必填):OAuth 客户端 IDclient_secret(必填):OAuth 客户端密钥username(必填):用户名password(必填):密码security_token(可选):安全令牌
- 客户端凭证流程(client_credentials):
client_id(必填):OAuth 客户端 IDclient_secret(必填):OAuth 客户端密钥
- 授权码流程(authorization_code):
client_id(必填):OAuth 客户端 IDclient_secret(必填):OAuth 客户端密钥code(必填):授权码redirect_uri(必填):重定向 URIstate(必填):state 参数,用于防止 CSRF 攻击
- 通用参数:
- 响应:Session ID、Server URL、用户信息、组织信息
-
Session ID 登录
- 接口路径:POST /api/salesforce/auth/session/login
- 请求参数:
login_url(可选):登录 URL(如 https://login.salesforce.com)system_id(必填):系统配置 IDsession_id(必填):Session IDserver_url(必填):服务器 URL
- 响应:Session ID、Server URL、用户信息、组织信息
-
Salesforce CLI 登录
- 接口路径:POST /api/salesforce/auth/cli/login
- 请求参数:
system_id(必填):系统配置 IDorg_alias(可选):组织别名
- 响应:Session ID、Instance URL、用户信息、组织信息
-
Legacy Credential 登录
- 接口路径:POST /api/salesforce/auth/legacy/login
- 请求参数:
login_url(可选):登录 URL(如 https://login.salesforce.com)system_id(必填):系统配置 IDusername(必填):用户名password(必填):密码security_token(可选):安全令牌
- 响应:Session ID、Server URL、用户信息、组织信息
-
刷新 Session
- 接口路径:POST /api/salesforce/auth/oauth2/refresh
- 请求参数:
system_id(必填):系统配置 IDrefresh_token(必填):刷新令牌
- 响应:新的 Session ID、Server URL
-
登出
- 接口路径:POST /api/salesforce/auth/logout
- 请求参数:
system_id(必填):系统配置 IDlogin_type(必填):登录类型(oauth2/session_id/cli/legacy_credential)
- 响应:成功/失败
-
获取支持的登录类型
- 接口路径:GET /api/salesforce/auth/login-types
- 响应:支持的登录类型列表
依赖关系
- 依赖
2026-01-21-003-01:多系统配置 - 依赖
datai-common模块的EncryptUtils工具类 - 依赖
datai-salesforce-common模块的 Salesforce API 封装 - 依赖
datai-salesforce-auth模块的登录策略实现
后续需求
- 2026-01-21-003-03:登录历史
- 2026-01-21-003-04:缓存优化
- 2026-01-21-003-05:会话管理
- 2026-01-21-003-06:登录状态查询
- 2026-01-21-003-07:错误码映射