datai/docs/api-docs/2026-01-21-003-02-api.md

453 lines
12 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 策略模式登录 API 文档
## 元数据
- 需求编号2026-01-21-003-02
- 创建时间2026-01-22
- 创建人SSOT 架构师
- 版本1.0.0
## API 概述
Salesforce 策略模式登录 API 提供了 Salesforce 系统登录的完整功能支持四种登录策略OAuth2 Password、OAuth2 Client Credentials、OAuth2 Authorization Code、Session ID支持刷新令牌、登出、登录类型查询等功能。
## 基础信息
- API 名称Salesforce 策略模式登录 API
- API 版本1.0.0
- 描述:提供 Salesforce 系统登录功能,支持多种登录策略
- 认证方式JWT Token
- 基础路径:/api/salesforce/auth
## 端点列表
### 接口 1登录
- **请求方式**POST
- **请求路径**/api/salesforce/auth/login
- **功能描述**:使用指定的登录策略登录 Salesforce 系统
- **权限要求**:无
- **请求参数**
| 参数名 | 类型 | 必填 | 描述 | 示例值 |
| ------ | ---- | ---- | ---- | ------ |
| systemName | String | 是 | 系统名称 | production |
| loginType | String | 是 | 登录类型oauth2_password/oauth2_client_credentials/oauth2_authorization_code/session_id | oauth2_password |
| grantType | String | 否 | 授权类型OAuth2 登录时必填) | password |
| code | String | 否 | 授权码OAuth2 Authorization Code 登录时必填) | auth_code_123 |
| redirectUri | String | 否 | 重定向 URIOAuth2 Authorization Code 登录时必填) | https://example.com/callback |
| sessionId | String | 否 | Session IDSession ID 登录时必填) | 00D... |
| serverUrl | String | 否 | 服务器 URLSession ID 登录时必填) | https://example.salesforce.com |
#### OAuth2 Password 登录请求体
```json
{
"systemName": "production",
"loginType": "oauth2_password",
"grantType": "password"
}
```
#### OAuth2 Client Credentials 登录请求体
```json
{
"systemName": "production",
"loginType": "oauth2_client_credentials",
"grantType": "client_credentials"
}
```
#### OAuth2 Authorization Code 登录请求体
```json
{
"systemName": "production",
"loginType": "oauth2_authorization_code",
"grantType": "authorization_code",
"code": "auth_code_123",
"redirectUri": "https://example.com/callback"
}
```
#### Session ID 登录请求体
```json
{
"systemName": "production",
"loginType": "session_id",
"sessionId": "00D...",
"serverUrl": "https://example.salesforce.com"
}
```
- **响应参数**
| 参数名 | 类型 | 描述 |
| ------ | ---- | ---- |
| code | Integer | 响应码 |
| message | String | 响应信息 |
| data | Object | 响应数据 |
| data.sessionId | String | 会话 ID |
| data.serverUrl | String | 服务器 URL |
| data.userInfo | Object | 用户信息 |
| data.userInfo.userId | String | 用户 ID |
| data.userInfo.username | String | 用户名 |
| data.userInfo.orgId | String | 组织 ID |
| data.userInfo.orgName | String | 组织名称 |
- **成功响应示例**
```json
{
"code": 200,
"message": "操作成功",
"data": {
"sessionId": "00D...",
"serverUrl": "https://example.salesforce.com",
"userInfo": {
"userId": "005...",
"username": "user@example.com",
"orgId": "00D...",
"orgName": "Example Organization"
}
}
}
```
- **错误响应示例**
```json
{
"code": 500,
"message": "登录失败: 系统配置不存在",
"data": null
}
```
- **状态码**
| 状态码 | 描述 |
| ------ | ---- |
| 200 | 成功 |
| 400 | 请求参数错误 |
| 401 | 未认证 |
| 403 | 无权限 |
| 500 | 服务器内部错误 |
- **注意事项**
- OAuth2 登录成功后,登录信息会回写到 datai_sf_system_config 表
- Session ID 登录不会回写到数据库
- 系统配置必须存在且状态为正常
### 接口 2刷新令牌
- **请求方式**POST
- **请求路径**/api/salesforce/auth/refresh-token
- **功能描述**:使用刷新令牌获取新的访问令牌
- **权限要求**:无
- **请求参数**
| 参数名 | 类型 | 必填 | 描述 | 示例值 |
| ------ | ---- | ---- | ---- | ------ |
| systemName | String | 是 | 系统名称 | production |
| loginType | String | 是 | 登录类型 | oauth2_password |
- **请求体**
```json
{
"systemName": "production",
"loginType": "oauth2_password"
}
```
- **响应参数**
| 参数名 | 类型 | 描述 |
| ------ | ---- | ---- |
| code | Integer | 响应码 |
| message | String | 响应信息 |
| data | Object | 响应数据 |
| data.sessionId | String | 会话 ID |
| data.serverUrl | String | 服务器 URL |
- **成功响应示例**
```json
{
"code": 200,
"message": "操作成功",
"data": {
"sessionId": "00D...",
"serverUrl": "https://example.salesforce.com"
}
}
```
- **错误响应示例**
```json
{
"code": 500,
"message": "刷新令牌失败: Session ID 登录不支持刷新令牌",
"data": null
}
```
- **状态码**
| 状态码 | 描述 |
| ------ | ---- |
| 200 | 成功 |
| 400 | 请求参数错误 |
| 401 | 未认证 |
| 403 | 无权限 |
| 500 | 服务器内部错误 |
- **注意事项**
- 只有 OAuth2 登录支持刷新令牌
- Session ID 登录不支持刷新令牌
- 系统配置必须存在且状态为正常
- 系统配置中必须有有效的 refresh_token
### 接口 3登出
- **请求方式**POST
- **请求路径**/api/salesforce/auth/logout
- **功能描述**:登出 Salesforce 系统,清空登录信息
- **权限要求**:无
- **请求参数**
| 参数名 | 类型 | 必填 | 描述 | 示例值 |
| ------ | ---- | ---- | ---- | ------ |
| systemName | String | 是 | 系统名称 | production |
| loginType | String | 是 | 登录类型 | oauth2_password |
- **请求体**
```json
{
"systemName": "production",
"loginType": "oauth2_password"
}
```
- **响应参数**
| 参数名 | 类型 | 描述 |
| ------ | ---- | ---- |
| code | Integer | 响应码 |
| message | String | 响应信息 |
| data | Object | 响应数据 |
- **成功响应示例**
```json
{
"code": 200,
"message": "操作成功",
"data": null
}
```
- **错误响应示例**
```json
{
"code": 500,
"message": "登出失败: 系统配置不存在",
"data": null
}
```
- **状态码**
| 状态码 | 描述 |
| ------ | ---- |
| 200 | 成功 |
| 400 | 请求参数错误 |
| 401 | 未认证 |
| 403 | 无权限 |
| 500 | 服务器内部错误 |
- **注意事项**
- OAuth2 登录登出后,会清空 datai_sf_system_config 表中的登录信息
- Session ID 登录登出后,不会清空数据库中的登录信息
- 系统配置必须存在且状态为正常
### 接口 4获取支持的登录类型
- **请求方式**GET
- **请求路径**/api/salesforce/auth/login-types
- **功能描述**:获取系统支持的所有登录类型
- **权限要求**:无
- **请求参数**:无
- **响应参数**
| 参数名 | 类型 | 描述 |
| ------ | ---- | ---- |
| code | Integer | 响应码 |
| message | String | 响应信息 |
| data | Array | 响应数据 |
| data[].loginType | String | 登录类型 |
| data[].loginTypeName | String | 登录类型名称 |
| data[].description | String | 描述 |
- **成功响应示例**
```json
{
"code": 200,
"message": "操作成功",
"data": [
{
"loginType": "oauth2_password",
"loginTypeName": "OAuth2 Password 登录",
"description": "使用用户名、密码、安全令牌进行登录"
},
{
"loginType": "oauth2_client_credentials",
"loginTypeName": "OAuth2 Client Credentials 登录",
"description": "使用客户端凭证进行登录"
},
{
"loginType": "oauth2_authorization_code",
"loginTypeName": "OAuth2 Authorization Code 登录",
"description": "使用授权码进行登录"
},
{
"loginType": "session_id",
"loginTypeName": "Session ID 登录",
"description": "使用已有的 Session ID 进行登录"
}
]
}
```
- **错误响应示例**
```json
{
"code": 500,
"message": "服务器内部错误",
"data": null
}
```
- **状态码**
| 状态码 | 描述 |
| ------ | ---- |
| 200 | 成功 |
| 500 | 服务器内部错误 |
- **注意事项**
- 该接口不需要认证
- 返回的登录类型列表是系统支持的所有登录类型
## 登录类型说明
### OAuth2 Password 登录
- **登录类型**oauth2_password
- **授权类型**password
- **描述**:使用用户名、密码、安全令牌进行登录
- **支持刷新令牌**:是
- **登录信息回写**:是
- **适用场景**:适用于有用户名、密码、安全令牌的场景
### OAuth2 Client Credentials 登录
- **登录类型**oauth2_client_credentials
- **授权类型**client_credentials
- **描述**:使用客户端凭证进行登录
- **支持刷新令牌**:是
- **登录信息回写**:是
- **适用场景**:适用于只有客户端凭证的场景
### OAuth2 Authorization Code 登录
- **登录类型**oauth2_authorization_code
- **授权类型**authorization_code
- **描述**:使用授权码进行登录
- **支持刷新令牌**:是
- **登录信息回写**:是
- **适用场景**:适用于需要用户授权的场景
### Session ID 登录
- **登录类型**session_id
- **授权类型**:无
- **描述**:使用已有的 Session ID 进行登录
- **支持刷新令牌**:否
- **登录信息回写**:否
- **适用场景**:适用于已有 Session ID 的临时访问场景
## 错误码说明
| 错误码 | 错误信息 | 描述 |
| ------ | -------- | ---- |
| 200 | 操作成功 | 请求成功 |
| 400 | 请求参数错误 | 请求参数不正确 |
| 401 | 未认证 | 未进行身份认证 |
| 403 | 无权限 | 无权限访问该资源 |
| 500 | 服务器内部错误 | 服务器内部错误 |
## 使用示例
### 示例 1OAuth2 Password 登录
```bash
curl -X POST http://localhost:8080/api/salesforce/auth/login \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"systemName": "production",
"loginType": "oauth2_password",
"grantType": "password"
}'
```
### 示例 2OAuth2 Client Credentials 登录
```bash
curl -X POST http://localhost:8080/api/salesforce/auth/login \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"systemName": "production",
"loginType": "oauth2_client_credentials",
"grantType": "client_credentials"
}'
```
### 示例 3OAuth2 Authorization Code 登录
```bash
curl -X POST http://localhost:8080/api/salesforce/auth/login \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"systemName": "production",
"loginType": "oauth2_authorization_code",
"grantType": "authorization_code",
"code": "auth_code_123",
"redirectUri": "https://example.com/callback"
}'
```
### 示例 4Session ID 登录
```bash
curl -X POST http://localhost:8080/api/salesforce/auth/login \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"systemName": "production",
"loginType": "session_id",
"sessionId": "00D...",
"serverUrl": "https://example.salesforce.com"
}'
```
### 示例 5刷新令牌
```bash
curl -X POST http://localhost:8080/api/salesforce/auth/refresh-token \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"systemName": "production",
"loginType": "oauth2_password"
}'
```
### 示例 6登出
```bash
curl -X POST http://localhost:8080/api/salesforce/auth/logout \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
-d '{
"systemName": "production",
"loginType": "oauth2_password"
}'
```
### 示例 7获取支持的登录类型
```bash
curl -X GET http://localhost:8080/api/salesforce/auth/login-types \
-H "Authorization: Bearer YOUR_JWT_TOKEN"
```
## 相关文档
- [需求文档](../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/2026-01-21-003-02-salesforce-strategy-login-database.md)
- [代码生成提示词](../prompts/2026-01-21-003-02-salesforce-strategy-login代码生成提示词.md)
- [会话记录](../sessions/2026-01-21-003-02-session.md)
- [变更日志](../changelog/2026-01-21-003-02-changelog.md)
- [复盘文档](../retros/2026-01-21-003-02-retro.md)