diff --git a/doc/salesforce/auth/Salesforce登录接口说明文档.md b/doc/salesforce/auth/Salesforce登录接口说明文档.md new file mode 100644 index 0000000..46b6915 --- /dev/null +++ b/doc/salesforce/auth/Salesforce登录接口说明文档.md @@ -0,0 +1,204 @@ +# Salesforce登录接口说明文档 + +## 1. 概述 + +本文档详细描述了系统中提供的四种Salesforce登录策略的使用方法,包括每种策略所需的参数、调用方式以及异常处理机制。系统采用策略模式设计,方便扩展和维护。 + +## 2. 登录策略概览 + +系统目前支持以下四种登录策略: + +| 策略名称 | 登录类型(loginType) | 描述 | +|---------|-------------------|------| +| OAuth2LoginStrategy | oauth2 | 支持OAuth 2.0的三种授权模式 | +| LegacyCredentialLoginStrategy | legacy_credential | 使用用户名、密码和安全令牌的传统登录方式 | +| SessionIdLoginStrategy | session_id | 使用已有的Salesforce Session ID进行登录 | +| SalesforceCliLoginStrategy | salesforce_cli | 通过Salesforce CLI工具获取访问令牌 | + +## 3. 各登录策略详细说明 + +### 3.1 OAuth2LoginStrategy (oauth2) + +#### 3.1.1 支持的授权模式 + +该策略支持以下三种OAuth 2.0授权模式: + +1. **密码模式 (Password Grant)** - 直接使用用户名和密码获取访问令牌 +2. **客户端凭证模式 (Client Credentials Grant)** - 使用客户端凭证获取访问令牌 +3. **授权码模式 (Authorization Code Grant)** - 通过用户授权获取访问令牌 + +#### 3.1.2 参数说明 + +| 参数名 | 类型 | 必填 | 说明 | +|-------|-----|-----|------| +| loginType | String | 是 | 固定值:"oauth2" | +| grantType | String | 是 | 授权类型:"password"、"client_credentials"或"authorization_code" | +| username | String | 条件 | 密码模式必填 | +| password | String | 条件 | 密码模式必填 | +| securityToken | String | 条件 | 密码模式时的安全令牌 | +| clientId | String | 是 | 应用的客户端ID | +| clientSecret | String | 是 | 应用的客户端密钥 | +| code | String | 条件 | 授权码模式必填 | +| state | String | 条件 | 授权码模式必填,用于防止CSRF攻击 | + +#### 3.1.3 调用示例 + +##### 密码模式示例: + +```java +SalesforceLoginRequest request = new SalesforceLoginRequest(); +request.setLoginType("oauth2"); +request.setGrantType("password"); +request.setUsername("user@example.com"); +request.setPassword("password"); +request.setSecurityToken("securityToken"); +request.setClientId("your_client_id"); +request.setClientSecret("your_client_secret"); + +SalesforceLoginResult result = loginService.login(request); +``` + +##### 客户端凭证模式示例: + +```java +SalesforceLoginRequest request = new SalesforceLoginRequest(); +request.setLoginType("oauth2"); +request.setGrantType("client_credentials"); +request.setClientId("your_client_id"); +request.setClientSecret("your_client_secret"); + +SalesforceLoginResult result = loginService.login(request); +``` + +##### 授权码模式示例: + +```java +// 第一步:生成授权URL并引导用户访问 +// 第二步:用户授权后回调获取code和state参数 +SalesforceLoginRequest request = new SalesforceLoginRequest(); +request.setLoginType("oauth2"); +request.setGrantType("authorization_code"); +request.setCode("authorization_code_from_callback"); +request.setState("state_from_callback"); +request.setClientId("your_client_id"); +request.setClientSecret("your_client_secret"); + +SalesforceLoginResult result = loginService.login(request); +``` + +#### 3.1.4 异常处理 + +| 异常类 | 错误码 | 说明 | +|--------|-------|------| +| SalesforceOAuthException | OAUTH2_UNSUPPORTED_GRANT_TYPE | 不支持的授权类型 | +| SalesforceOAuthException | OAUTH2_MISSING_REFRESH_TOKEN | 缺少刷新令牌 | +| SalesforceOAuthException | OAUTH2_CONFIG_ERROR | 配置错误 | +| SalesforceOAuthException | OAUTH2_MISSING_CLIENT_ID | 缺少客户端ID | +| SalesforceOAuthException | OAUTH2_MISSING_CLIENT_SECRET | 缺少客户端密钥 | +| SalesforceOAuthException | OAUTH2_MISSING_AUTHORIZATION_CODE | 缺少授权码 | +| SalesforceOAuthException | OAUTH2_MISSING_STATE | 缺少state参数 | +| SalesforceOAuthException | OAUTH2_INVALID_STATE | 无效的state参数 | +| SalesforceOAuthException | OAUTH2_EXPIRED_STATE | state参数已过期 | + +### 3.2 LegacyCredentialLoginStrategy (legacy_credential) + +#### 3.2.1 参数说明 + +| 参数名 | 类型 | 必填 | 说明 | +|-------|-----|-----|------| +| loginType | String | 是 | 固定值:"legacy_credential" | +| username | String | 是 | Salesforce用户名 | +| password | String | 是 | Salesforce密码 | +| securityToken | String | 否 | 安全令牌(根据Salesforce设置可能必需) | + +#### 3.2.2 调用示例 + +```java +SalesforceLoginRequest request = new SalesforceLoginRequest(); +request.setLoginType("legacy_credential"); +request.setUsername("user@example.com"); +request.setPassword("password"); +request.setSecurityToken("securityToken"); + +SalesforceLoginResult result = loginService.login(request); +``` + +#### 3.2.3 异常处理 + +| 异常类 | 错误码 | 说明 | +|--------|-------|------| +| SalesforceLegacyCredentialLoginException | MISSING_USERNAME | 缺少用户名 | +| SalesforceLegacyCredentialLoginException | MISSING_PASSWORD | 缺少密码 | +| SalesforceLegacyCredentialLoginException | CONFIG_NOT_FOUND | 配置未找到 | +| SalesforceLegacyCredentialLoginException | SOAP_FAULT | SOAP故障 | + +### 3.3 SessionIdLoginStrategy (session_id) + +#### 3.3.1 参数说明 + +| 参数名 | 类型 | 必填 | 说明 | +|-------|-----|-----|------| +| loginType | String | 是 | 固定值:"session_id" | +| sessionId | String | 是 | Salesforce Session ID | + +#### 3.3.2 调用示例 + +```java +SalesforceLoginRequest request = new SalesforceLoginRequest(); +request.setLoginType("session_id"); +request.setSessionId("00Dxx0000000000!ARUAQH7..."); + +SalesforceLoginResult result = loginService.login(request); +``` + +#### 3.3.3 异常处理 + +| 异常类 | 错误码 | 说明 | +|--------|-------|------| +| SalesforceSessionIdLoginException | SESSION_ID_EMPTY | Session ID为空 | +| SalesforceSessionIdLoginException | CONFIG_NOT_FOUND | 配置未找到 | +| SalesforceSessionIdLoginException | INVALID_SESSION_ID | 无效的Session ID | + +### 3.4 SalesforceCliLoginStrategy (salesforce_cli) + +#### 3.4.1 参数说明 + +| 参数名 | 类型 | 必填 | 说明 | +|-------|-----|-----|------| +| loginType | String | 是 | 固定值:"salesforce_cli" | +| orgAlias | String | 否 | Salesforce组织别名,如果不提供则使用默认组织 | + +#### 3.4.2 调用示例 + +```java +SalesforceLoginRequest request = new SalesforceLoginRequest(); +request.setLoginType("salesforce_cli"); +request.setOrgAlias("your_org_alias"); // 可选 + +SalesforceLoginResult result = loginService.login(request); +``` + +#### 3.4.3 异常处理 + +| 异常类 | 错误码 | 说明 | +|--------|-------|------| +| SalesforceCliLoginException | CLI_NOT_INSTALLED | Salesforce CLI未安装 | +| SalesforceCliLoginException | CLI_COMMAND_FAILED | CLI命令执行失败 | +| SalesforceCliLoginException | CLI_PARSE_ERROR | CLI输出解析错误 | + +## 4. 返回结果说明 + +所有登录方法都会返回[SalesforceLoginResult](file:///D:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-auth/src/main/java/com/datai/auth/domain/SalesforceLoginResult.java#L15-L152)对象,包含以下字段: + +| 字段名 | 类型 | 说明 | +|-------|-----|------| +| success | boolean | 登录是否成功 | +| accessToken | String | 访问令牌 | +| refreshToken | String | 刷新令牌 | +| instanceUrl | String | Salesforce实例URL | +| organizationId | String | 组织ID | +| userId | String | 用户ID | +| tokenType | String | 令牌类型(通常是"Bearer") | +| expiresIn | long | 令牌过期时间(秒) | +| errorMessage | String | 错误消息 | +| errorCode | String | 错误码 | diff --git a/doc/salesforce/auth/接口调用说明文档.md b/doc/salesforce/auth/接口调用说明文档.md new file mode 100644 index 0000000..f28b16f --- /dev/null +++ b/doc/salesforce/auth/接口调用说明文档.md @@ -0,0 +1,488 @@ +# Salesforce登录认证接口调用说明文档 + +## 1. 概述 + +本文档详细描述了Salesforce登录认证模块提供的RESTful API接口,包括各接口的功能、请求方式、参数说明、返回结果以及调用示例。 + +### 1.1 基础信息 + +- 基础路径:`/salesforce/login` +- 控制器类:`DataISfLoginController` +- 跨域支持:是 + +## 2. 接口详情 + +### 2.1 执行登录 + +#### 接口描述 +根据不同登录类型执行Salesforce登录操作。 + +#### 请求URL +``` +POST /salesforce/login/execute +``` + +#### 请求头 +``` +Content-Type: application/json +``` + +#### 请求体参数 (SalesforceLoginRequest) +| 参数名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| loginType | String | 是 | 登录类型,支持的类型有:oauth2、salesforce_cli、legacy_credential、session_id | +| username | String | 否 | 用户名 | +| password | String | 否 | 密码 | +| securityToken | String | 否 | 安全令牌 | +| clientId | String | 否 | OAuth客户端ID | +| clientSecret | String | 否 | OAuth客户端密钥 | +| grantType | String | 否 | OAuth授权类型 | +| orgAlias | String | 否 | Salesforce CLI组织别名 | +| privateKeyPath | String | 否 | 私有密钥路径 | +| privateKeyPassword | String | 否 | 私有密钥密码 | +| code | String | 否 | OAuth授权码 | +| sessionId | String | 否 | Salesforce Session ID | + +#### 不同登录类型所需参数说明 + +##### 1. oauth2 登录类型 +使用OAuth 2.0标准方式进行登录,适用于大多数现代应用集成场景。 + +必需参数: +- loginType: "oauth2" +- username: 用户名 +- password: 密码 +- clientId: OAuth客户端ID +- clientSecret: OAuth客户端密钥 +- grantType: 授权类型,支持 "password"、"authorization_code" 或 "client_credentials" + +示例请求: +```json +{ + "loginType": "oauth2", + "username": "user@example.com", + "password": "password123", + "clientId": "your_client_id", + "clientSecret": "your_client_secret", + "grantType": "password" +} +``` + +##### 2. salesforce_cli 登录类型 +使用Salesforce CLI已经登录的会话进行身份验证,适用于开发和测试环境。 + +必需参数: +- loginType: "salesforce_cli" +- username: 用户名 +- orgAlias: (可选) 已登录的CLI组织别名 + +示例请求: +```json +{ + "loginType": "salesforce_cli", + "username": "user@example.com", + "orgAlias": "my-sandbox" +} +``` + +##### 3. legacy_credential 登录类型 +使用传统的用户名、密码和安全令牌组合进行登录,适用于较老的系统集成。 + +必需参数: +- loginType: "legacy_credential" +- username: 用户名 +- password: 密码 +- securityToken: 安全令牌 + +示例请求: +```json +{ + "loginType": "legacy_credential", + "username": "user@example.com", + "password": "password123", + "securityToken": "securityToken123" +} +``` + +##### 4. session_id 登录类型 +使用已有的Salesforce Session ID进行登录,适用于已有有效会话的场景。 + +必需参数: +- loginType: "session_id" +- sessionId: Salesforce Session ID + +示例请求: +```json +{ + "loginType": "session_id", + "sessionId": "00Dxx0000001gEWEAY!ARwAQ.KBMrn123XYZ" +} +``` + +#### 请求示例 +``` +{ + "loginType": "oauth2", + "username": "user@example.com", + "password": "password123", + "clientId": "your_client_id", + "clientSecret": "your_client_secret", + "grantType": "password" +} +``` + +#### 成功响应示例 +``` +{ + "code": 200, + "msg": "登录成功", + "data": { + "success": true, + "accessToken": "00Dxx0000001gEWEAY!ARwAQ...", + "refreshToken": "5Aep861z1k8KCNBg3KmH1...", + "instanceUrl": "https://your-instance.salesforce.com", + "organizationId": "00Dxx0000001gEWEAY", + "userId": "005xx000001SwiQAAS", + "tokenType": "Bearer", + "expiresIn": 7200 + } +} +``` + +#### 失败响应示例 +``` +{ + "code": 500, + "msg": "登录失败: Invalid username, password, security token; or user locked out." +} +``` + +--- + +### 2.2 刷新令牌 + +#### 接口描述 +使用刷新令牌获取新的访问令牌。 + +#### 请求URL +``` +POST /salesforce/login/refresh-token +``` + +#### 请求参数 (@RequestParam) +| 参数名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| refreshToken | String | 是 | 刷新令牌 | +| loginType | String | 是 | 登录类型,支持的类型有:oauth2、salesforce_cli、legacy_credential、session_id | + +#### 请求示例 +``` +POST /salesforce/login/refresh-token?refreshToken=5Aep861z1k8KCNBg3KmH1...&loginType=oauth2 +``` + +#### 成功响应示例 +``` +{ + "code": 200, + "msg": "令牌刷新成功", + "data": { + "success": true, + "accessToken": "00Dxx0000001gEWEAY!ARwAQ...", + "refreshToken": "5Aep861z1k8KCNBg3KmH1...", + "instanceUrl": "https://your-instance.salesforce.com", + "organizationId": "00Dxx0000001gEWEAY", + "userId": "005xx000001SwiQAAS", + "tokenType": "Bearer", + "expiresIn": 7200 + } +} +``` + +#### 失败响应示例 +``` +{ + "code": 500, + "msg": "刷新令牌失败: expired authorization code" +} +``` + +--- + +### 2.3 执行登出 + +#### 接口描述 +退出登录,清理登录状态。 + +#### 请求URL +``` +POST /salesforce/login/logout +``` + +#### 请求参数 (@RequestParam) +| 参数名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| accessToken | String | 是 | 访问令牌 | +| loginType | String | 是 | 登录类型,支持的类型有:oauth2、salesforce_cli、legacy_credential、session_id | + +#### 请求示例 +``` +POST /salesforce/login/logout?accessToken=00Dxx0000001gEWEAY!ARwAQ...&loginType=oauth2 +``` + +#### 成功响应示例 +``` +{ + "code": 200, + "msg": "登出成功" +} +``` + +#### 失败响应示例 +``` +{ + "code": 500, + "msg": "登出失败" +} +``` + +--- + +### 2.4 获取当前登录状态 + +#### 接口描述 +获取当前系统的登录状态。 + +#### 请求URL +``` +GET /salesforce/login/status +``` + +#### 请求示例 +``` +GET /salesforce/login/status +``` + +#### 成功响应示例 +``` +{ + "code": 200, + "msg": "获取成功", + "data": { + "success": true, + "accessToken": "00Dxx0000001gEWEAY!ARwAQ...", + "refreshToken": "5Aep861z1k8KCNBg3KmH1...", + "instanceUrl": "https://your-instance.salesforce.com", + "organizationId": "00Dxx0000001gEWEAY", + "userId": "005xx000001SwiQAAS", + "tokenType": "Bearer", + "expiresIn": 7200 + } +} +``` + +#### 失败响应示例 +``` +{ + "code": 500, + "msg": "获取登录状态失败: 未找到有效的登录状态" +} +``` + +--- + +### 2.5 验证令牌 + +#### 接口描述 +验证访问令牌的有效性。 + +#### 请求URL +``` +GET /salesforce/login/validate-token +``` + +#### 请求参数 (@RequestParam) +| 参数名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| accessToken | String | 是 | 访问令牌 | + +#### 请求示例 +``` +GET /salesforce/login/validate-token?accessToken=00Dxx0000001gEWEAY!ARwAQ... +``` + +#### 成功响应示例 +``` +{ + "code": 200, + "msg": "令牌有效" +} +``` + +#### 失败响应示例 +``` +{ + "code": 500, + "msg": "令牌无效" +} +``` + +--- + +### 2.6 绑定令牌 + +#### 接口描述 +将令牌绑定到指定设备和IP。 + +#### 请求URL +``` +POST /salesforce/login/bind-token +``` + +#### 请求参数 (@RequestParam) +| 参数名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| accessToken | String | 是 | 访问令牌 | +| deviceId | String | 否 | 设备ID | +| ip | String | 否 | IP地址 | + +#### 请求示例 +``` +POST /salesforce/login/bind-token?accessToken=00Dxx0000001gEWEAY!ARwAQ...&deviceId=device123&ip=192.168.1.100 +``` + +#### 成功响应示例 +``` +{ + "code": 200, + "msg": "令牌绑定成功" +} +``` + +#### 失败响应示例 +``` +{ + "code": 500, + "msg": "绑定令牌失败: 令牌不存在" +} +``` + +--- + +### 2.7 检查令牌绑定 + +#### 接口描述 +检查令牌是否与指定设备和IP匹配。 + +#### 请求URL +``` +GET /salesforce/login/check-binding +``` + +#### 请求参数 (@RequestParam) +| 参数名 | 类型 | 必填 | 描述 | +|--------|------|------|------| +| accessToken | String | 是 | 访问令牌 | +| deviceId | String | 否 | 设备ID | +| ip | String | 否 | IP地址 | + +#### 请求示例 +``` +GET /salesforce/login/check-binding?accessToken=00Dxx0000001gEWEAY!ARwAQ...&deviceId=device123&ip=192.168.1.100 +``` + +#### 成功响应示例 +``` +{ + "code": 200, + "msg": "令牌绑定匹配" +} +``` + +#### 失败响应示例 +``` +{ + "code": 500, + "msg": "令牌绑定不匹配" +} +``` + +--- + +### 2.8 获取当前会话信息 + +#### 接口描述 +获取当前登录成功的会话详细信息。 + +#### 请求URL +``` +GET /salesforce/login/session +``` + +#### 请求示例 +``` +GET /salesforce/login/session +``` + +#### 成功响应示例 +``` +{ + "code": 200, + "msg": "获取成功", + "data": { + "sessionId": 1, + "tenantId": "default", + "username": "user@example.com", + "loginType": "oauth2", + "status": "active", + "loginTime": "2025-12-14T10:30:00", + "expireTime": "2025-12-14T12:30:00", + "lastActivityTime": "2025-12-14T10:35:00", + "loginIp": "192.168.1.100", + "deviceInfo": "Windows PC", + "browserInfo": "Chrome 98.0.4758.102", + "sessionToken": "sess_abc123xyz", + "tokenId": 1001 + } +} +``` + +#### 失败响应示例 +``` +{ + "code": 500, + "msg": "当前没有活跃的登录会话" +} +``` + +## 3. 返回码说明 + +| 返回码 | 说明 | +|--------|------| +| 200 | 操作成功 | +| 500 | 系统内部错误 | + +## 4. 注意事项 + +1. 所有接口均支持跨域调用 +2. 登录成功后,系统会自动将登录结果缓存到Redis中 +3. 令牌刷新成功后,系统会自动更新缓存中的登录状态 +4. 登出操作会清理相关的登录状态缓存 +5. 令牌绑定功能可以增强系统安全性,防止令牌被盗用 +6. 所有敏感操作都会记录日志,便于审计追踪 + +## 5. 错误处理 + +当发生错误时,系统会返回统一的错误格式: +``` +{ + "code": 错误码, + "msg": "错误描述信息" +} +``` + +常见错误情况包括但不限于: +- 参数校验失败 +- 网络连接异常 +- Salesforce API调用失败 +- 缓存服务不可用 +- 数据库操作异常 \ No newline at end of file diff --git a/doc/salesforce/auth/获取当前会话信息接口说明文档.md b/doc/salesforce/auth/获取当前会话信息接口说明文档.md new file mode 100644 index 0000000..94232ca --- /dev/null +++ b/doc/salesforce/auth/获取当前会话信息接口说明文档.md @@ -0,0 +1,160 @@ +# 获取当前会话信息接口说明文档 + +## 1. 接口概述 + +### 1.1 接口名称 +获取当前会话信息 + +### 1.2 接口描述 +该接口用于获取当前用户登录成功的会话详细信息,包括用户基本信息、登录时间、会话状态等。通过此接口可以验证用户是否已登录以及获取当前登录会话的详细数据。 + +### 1.3 请求URL +``` +GET /salesforce/login/session +``` + +### 1.4 请求方法 +GET + +### 1.5 是否需要认证 +否(但需确保用户已登录) + +## 2. 请求参数 + +该接口无需传递任何请求参数。 + +## 3. 响应格式 + +### 3.1 响应结构 +```json +{ + "code": 200, + "msg": "获取成功", + "data": { + // 会话详细信息对象 + } +} +``` + +### 3.2 响应字段说明 + +| 字段名 | 类型 | 说明 | +|--------|------|------| +| code | Integer | 响应状态码,200表示成功 | +| msg | String | 响应消息 | +| data | Object | 响应数据,包含会话详细信息 | + +### 3.3 会话信息对象字段说明 + +| 字段名 | 类型 | 说明 | +|--------|------|------| +| sessionId | Long | 会话ID | +| tenantId | String | 租户编号 | +| username | String | 用户名 | +| loginType | String | 登录类型(oauth2、salesforce_cli、legacy_credential、session_id) | +| status | String | 会话状态(ACTIVE、EXPIRED等) | +| loginTime | String | 登录时间(ISO 8601格式) | +| expireTime | String | 过期时间(ISO 8601格式) | +| lastActivityTime | String | 最后活动时间(ISO 8601格式) | +| loginIp | String | 登录IP地址 | +| deviceInfo | String | 设备信息 | +| browserInfo | String | 浏览器信息 | +| sessionToken | String | 会话标识 | +| tokenId | Long | 令牌ID | + +## 4. 使用示例 + +### 4.1 请求示例 +```bash +curl -X GET "http://localhost:8080/salesforce/login/session" \ +-H "Content-Type: application/json" +``` + +### 4.2 成功响应示例 +```json +{ + "code": 200, + "msg": "获取成功", + "data": { + "sessionId": 10001, + "tenantId": "default", + "username": "user@example.com", + "loginType": "oauth2", + "status": "ACTIVE", + "loginTime": "2025-12-14T10:30:00", + "expireTime": "2025-12-14T12:30:00", + "lastActivityTime": "2025-12-14T10:35:00", + "loginIp": "192.168.1.100", + "deviceInfo": "Windows PC", + "browserInfo": "Chrome 98.0.4758.102", + "sessionToken": "sess_abc123xyz", + "tokenId": 20001 + } +} +``` + +### 4.3 失败响应示例(无活跃会话) +```json +{ + "code": 500, + "msg": "当前没有活跃的登录会话" +} +``` + +### 4.4 失败响应示例(系统异常) +```json +{ + "code": 500, + "msg": "获取当前登录会话信息失败: 数据库连接异常" +} +``` + +## 5. 业务逻辑说明 + +### 5.1 接口工作原理 +1. 接收到请求后,系统会查询数据库中所有状态为"ACTIVE"的登录会话记录 +2. 按照登录时间倒序排列,获取最新的会话记录 +3. 将会话信息缓存到Redis中以提高下次访问的性能 +4. 返回会话详细信息给客户端 + +### 5.2 会话状态说明 +- ACTIVE:活跃会话,用户当前已登录 +- EXPIRED:已过期会话,用户需要重新登录 +- REVOKED:已吊销会话,用户主动登出或被管理员强制登出 + +### 5.3 数据来源 +会话信息存储在[datai_sf_login_session](file:///D:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-auth/src/main/java/com/datai/auth/mapper/DataiSfLoginSessionMapper.java#L17-L17)表中,与[datai_sf_token](file:///D:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-auth/src/main/java/com/datai/auth/mapper/DataiSfTokenMapper.java#L17-L17)表通过[tokenId](file:///D:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-auth/src/main/java/com/datai/auth/domain/DataiSfLoginSession.java#L101-L101)字段关联。 + +## 6. 异常处理 + +### 6.1 常见异常情况 +| 异常情况 | 错误码 | 错误信息 | 处理建议 | +|---------|--------|---------|---------| +| 无活跃会话 | 500 | 当前没有活跃的登录会话 | 用户需要重新登录 | +| 数据库异常 | 500 | 获取当前登录会话信息失败: [具体错误信息] | 检查数据库连接和服务状态 | +| 系统内部错误 | 500 | 获取当前登录会话信息失败: [具体错误信息] | 查看系统日志,联系技术支持 | + +### 6.2 日志记录 +接口调用过程中会产生以下日志: +- INFO级别:记录接口调用开始和结束 +- DEBUG级别:记录详细的处理过程 +- ERROR级别:记录异常信息 + +## 7. 性能与安全 + +### 7.1 性能优化 +- 使用Redis缓存会话信息,减少数据库访问 +- 对数据库查询结果进行排序优化 +- 限制返回的会话记录数量(仅返回最新的活跃会话) + +### 7.2 安全考虑 +- 接口不暴露敏感信息如密码、访问令牌等 +- 会话信息仅包含必要的元数据 +- 所有操作都记录审计日志 + +## 8. 相关接口 + +### 8.1 前置接口 +- [/salesforce/login/execute](file:///D:/idea_demo/datai/datai-scenes/datai-scene-salesforce/datai-salesforce-auth/src/main/java/com/datai/auth/controller/DataISfLoginController.java#L48-L74):执行登录,创建会话信息 + + diff --git a/src/api/auth/register.js b/src/api/auth/register.js new file mode 100644 index 0000000..8da18ad --- /dev/null +++ b/src/api/auth/register.js @@ -0,0 +1,85 @@ +import request from '@/utils/request' + +// 执行登录 +export function executeLogin(data) { + return request({ + url: '/salesforce/login/execute', + method: 'post', + data: data, + headers: { + 'Content-Type': 'application/json' + } + }) +} + +// 刷新访问令牌 +export function refreshToken(data) { + return request({ + url: '/salesforce/login/refresh-token', + method: 'post', + data: data, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + } + }) +} + +// 执行登出 +export function logout(data) { + return request({ + url: '/salesforce/login/logout', + method: 'post', + data: data, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + } + }) +} + +// 获取当前登录状态 +export function getLoginStatus() { + return request({ + url: '/salesforce/login/status', + method: 'get' + }) +} + +// 验证令牌有效性 +export function validateToken(accessToken) { + return request({ + url: '/salesforce/login/validate-token', + method: 'get', + params: { + accessToken: accessToken + } + }) +} + +// 绑定令牌到设备/IP +export function bindToken(data) { + return request({ + url: '/salesforce/login/bind-token', + method: 'post', + data: data, + headers: { + 'Content-Type': 'application/x-www-form-urlencoded' + } + }) +} + +// 检查令牌绑定 +export function checkBinding(params) { + return request({ + url: '/salesforce/login/check-binding', + method: 'get', + params: params + }) +} + +// 获取当前登录会话信息 +export function getLoginSession() { + return request({ + url: '/salesforce/login/session', + method: 'get' + }) +} \ No newline at end of file diff --git a/src/views/auth/index.vue b/src/views/auth/index.vue new file mode 100644 index 0000000..f1b2e17 --- /dev/null +++ b/src/views/auth/index.vue @@ -0,0 +1,372 @@ + + + + + + + + + 欢迎使用GEEK生态 + 打造高效、现代、可扩展的企业级开发平台 + + + + + + {{ item.text }} + + + + + {{ successCount }}+ + 成功案例 + + + + + {{ title }} + + + + + + + + + + + + + + diff --git a/src/views/auth/login.vue b/src/views/auth/login.vue new file mode 100644 index 0000000..5934fcc --- /dev/null +++ b/src/views/auth/login.vue @@ -0,0 +1,245 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 发送验证码 + + + + + + + + + + + + 记住我! + 若无账号自动注册~ + + + + 登 录 + 登 录 中... + + + 没有账号? + 立即注册 + + + + + diff --git a/src/views/auth/oauth.vue b/src/views/auth/oauth.vue new file mode 100644 index 0000000..0d2d7f6 --- /dev/null +++ b/src/views/auth/oauth.vue @@ -0,0 +1,171 @@ + + + + + + 第三方账号登录 + + + + + Gitee + + + + GitHub + + + + QQ + + + + 微信 + + + + + \ No newline at end of file diff --git a/src/views/auth/register.vue b/src/views/auth/register.vue new file mode 100644 index 0000000..89c74b2 --- /dev/null +++ b/src/views/auth/register.vue @@ -0,0 +1,248 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 发送验证码 + + + + + + + + + + + + + + + 注 册 + 注 册 中... + + + 已有账号? + 立即登录 + + + + + + diff --git a/src/views/auth/register/index.vue b/src/views/auth/register/index.vue new file mode 100644 index 0000000..ea82fa8 --- /dev/null +++ b/src/views/auth/register/index.vue @@ -0,0 +1,741 @@ + + + + Salesforce 认证中心 + 选择适合您的登录方式连接到 Salesforce + + + + + + + + + + + OAuth 2.0 认证 + 使用标准的 OAuth 2.0 协议进行安全认证 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 登录 + + + + + + + + + + + 传统凭据认证 + 使用用户名和密码进行传统登录 + + + + + + + + + + + + + + + + + + 登录 + + + + + + + + + + + Session ID 认证 + 使用现有的 Session ID 直接登录 + + + + + + + + + + 登录 + + + + + + + + + + + Salesforce CLI 认证 + 使用已配置的 Salesforce CLI 凭据登录 + + + + + + + + + + 登录 + + + + + + + + + + + + + + + 会话信息 + + {{ sessionInfo.status === 'active' ? '活跃' : '非活跃' }} + + + + + + + {{ sessionInfo.sessionId }} + + {{ sessionInfo.tenantId }} + {{ sessionInfo.username }} + {{ sessionInfo.loginType }} + + + {{ sessionInfo.status }} + + + {{ sessionInfo.loginTime }} + {{ sessionInfo.expireTime }} + {{ sessionInfo.lastActivityTime }} + {{ sessionInfo.loginIp }} + {{ sessionInfo.deviceInfo }} + {{ sessionInfo.browserInfo }} + + {{ sessionInfo.tokenId }} + + + + + + + 刷新会话信息 + + + + 退出登录 + + + + + + + + + + \ No newline at end of file
打造高效、现代、可扩展的企业级开发平台
选择适合您的登录方式连接到 Salesforce
使用标准的 OAuth 2.0 协议进行安全认证
使用用户名和密码进行传统登录
使用现有的 Session ID 直接登录
使用已配置的 Salesforce CLI 凭据登录