--- title: "删除API密钥" date: 2026-03-10 lastmod: 2026-03-10 description: "删除指定的API密钥" tags: ["安全", "API密钥", "认证"] summary: "注意:DELETE /_security/api_key API 在当前版本的 Easysearch 中尚未实现服务器端。 API 说明 # DELETE /_security/api_key 端点在当前 Easysearch 版本中未实现服务器端 REST 处理器。 虽然客户端库中存在相关的数据结构类(如 ApiKey.java),但服务器端缺少相应的 REST 处理器来处理 API 密钥的删除请求。 预期 API 格式 # DELETE /_security/api_key/{id} 预期参数 # 路径参数 # 参数 类型 是否必填 默认值 描述 {id} String 是 - 要删除的 API 密钥的唯一标识符 查询参数 # 参数 类型 是否必填 默认值 描述 refresh Boolean 否 true 是否立即刷新相关索引 预期请求示例 # 删除指定 API 密钥 # DELETE /_security/api_key/VuaCfGcBCdbkQm-e5aOx 删除并立即刷新 # DELETE /_security/api_key/VuaCfGcBCdbkQm-e5aOx?" --- **注意**:DELETE /_security/api_key API 在当前版本的 Easysearch 中**尚未实现**服务器端。 ## API 说明 `DELETE /_security/api_key` 端点在当前 Easysearch 版本中未实现服务器端 REST 处理器。 虽然客户端库中存在相关的数据结构类(如 `ApiKey.java`),但服务器端缺少相应的 REST 处理器来处理 API 密钥的删除请求。 ## 预期 API 格式 ``` DELETE /_security/api_key/{id} ``` ## 预期参数 ### 路径参数 | 参数 | 类型 | 是否必填 | 默认值 | 描述 | |------|------|----------|--------|------| | `{id}` | String | **是** | - | 要删除的 API 密钥的唯一标识符 | ### 查询参数 | 参数 | 类型 | 是否必填 | 默认值 | 描述 | |------|------|----------|--------|------| | `refresh` | Boolean | 否 | `true` | 是否立即刷新相关索引 | ## 预期请求示例 ### 删除指定 API 密钥 ``` DELETE /_security/api_key/VuaCfGcBCdbkQm-e5aOx ``` ### 删除并立即刷新 ``` DELETE /_security/api_key/VuaCfGcBCdbkQm-e5aOx?refresh=true ``` ## 预期响应格式 ### 成功响应 ```json { "found": true, "id": "VuaCfGcBCdbkQm-e5aOx", "name": "my-api-key" } ``` ### API 密钥不存在 ```json { "found": false, "id": "VuaCfGcBCdbkQm-e5aOx" } ``` ## 响应字段说明 | 字段 | 类型 | 描述 | |------|------|------| | `found` | Boolean | 是否找到并删除了 API 密钥 | | `id` | String | API 密钥的唯一标识符 | | `name` | String | API 密钥的名称(如果存在) | ## 当前状态 在 Easysearch 当前版本中: - **客户端支持**:存在 `ApiKey` 类定义 - **服务器端实现**:未实现 REST 处理器 - **安全模块**:`SecurityRestApiActions.java` 中未包含 API 密钥处理器 ## 相关文件 ### 客户端类 - `client/rest-high-level/src/main/java/org/easysearch/client/security/support/ApiKey.java` - `client/rest-high-level/src/main/java/org/easysearch/client/security/GetApiKeyResponse.java` - `client/rest-high-level/src/main/java/org/easysearch/client/security/CreateApiKeyResponse.java` ### 服务器端(缺少实现) - `modules/security/src/main/java/com/infinilabs/security/dlic/rest/api/SecurityRestApiActions.java` ## API 密钥结构 根据客户端类 `ApiKey` 的定义: | 字段 | 类型 | 描述 | |------|------|------| | `name` | String | API 密钥的名称 | | `id` | String | API 密钥的唯一标识符 | | `creation` | Instant | API 密钥的创建时间 | | `expiration` | Instant | API 密钥的过期时间 | | `invalidated` | Boolean | API 密钥是否已被失效 | | `username` | String | 关联的用户名 | | `realm` | String | 认证领域名称 | ## 实现建议 如需实现此功能,需要: 1. 创建新的 `ApiKeyAction` 类,继承 `AbstractApiAction` 2. 将其添加到 `SecurityRestApiActions.getHandler()` 方法 3. 实现 `handleDelete` 方法处理 API 密钥删除 4. 定义适当的验证和错误处理 5. 实现密钥失效和清理机制 ## 替代方案 目前可以使用以下替代方案管理认证: - **用户管理**:通过删除用户来撤销其所有认证方式 - **令牌失效**:使用令牌黑名单机制(如果已实现) - **密码更改**:强制更改用户密码 ## 注意事项 1. **未实现功能**:该 API 当前不可用 2. **不可恢复**:删除后 API 密钥无法恢复 3. **立即生效**:删除后该密钥将立即无法使用 4. **审计日志**:建议记录删除操作用于审计 ## 参考文档 如需实现此功能,可以参考: - Elasticsearch 的 API 密钥管理功能 - OpenSearch 的 API 密钥实现