ERPTurbo_Poster/openspec/changes/archive/2025-11-20-add-api-authentication/specs/authentication/spec.md
shenyifei dc940d2598 feat(api): 添加海报和PDF生成功能
- 新增海报生成接口,支持从网页URL或HTML内容生成海报图像
- 新增PDF生成接口,支持从网页URL或HTML内容生成PDF文档
- 添加Swagger API文档注释,完善接口描述和参数说明
- 实现HTML内容参数支持,允许直接传入HTML结构生成海报/PDF
- 添加输入验证和标准化响应格式
- 引入DOMPurify库对HTML内容进行安全过滤
- 更新环境变量配置,支持API密钥认证和CORS设置
- 优化上传逻辑,统一返回标准响应结构
- 添加构建脚本支持Docker镜像打包和推送
2025-11-20 17:51:35 +08:00

3.5 KiB
Raw Blame History

规范API 认证功能

ADDED Requirements

Requirement: API密钥验证中间件

  • 描述MUST 系统必须包含一个中间件函数,用于验证传入 API 请求的认证凭据
  • 验证方法:中间件应能从请求头或查询参数中提取认证凭据
  • 依赖项:无

Scenario: 提取Bearer令牌

  • 当客户端在Authorization头中发送Bearer令牌时
  • 系统应能正确提取令牌值
  • 例如Authorization: Bearer abc123def456

Scenario: 提取自定义API密钥头

  • 当客户端在X-API-Key头中发送API密钥时
  • 系统应能正确提取密钥值
  • 例如X-API-Key: abc123def456

Requirement: API密钥验证

  • 描述MUST 系统必须验证提供的API密钥是否在允许的密钥列表中
  • 验证方法:通过与环境变量中配置的允许密钥进行比较
  • 依赖项Environment Configuration

Scenario: 有效API密钥验证

  • 当请求包含有效的API密钥时
  • 系统应允许请求继续处理
  • 应返回200状态码或继续执行业务逻辑

Scenario: 无效API密钥验证

  • 当请求包含无效的API密钥时
  • 系统应拒绝请求
  • 应返回401未授权状态码

Scenario: 缺失API密钥验证

  • 当请求未包含API密钥时
  • 系统应拒绝请求
  • 应返回401未授权状态码

Requirement: 环境变量配置

  • 描述SHALL 系统应通过环境变量配置允许的API密钥
  • 验证方法从ALLOWED_API_KEYS环境变量读取密钥列表
  • 依赖项:无

Scenario: 配置单个API密钥

  • 当环境变量ALLOWED_API_KEYS设置为单个密钥时
  • 系统应仅接受该密钥的请求

Scenario: 配置多个API密钥

  • 当环境变量ALLOWED_API_KEYS设置为多个用逗号分隔的密钥时
  • 系统应接受任一密钥的请求

Requirement: 选择性应用认证

  • 描述SHALL 系统应仅对需要保护的API端点应用认证
  • 验证方法:认证中间件应仅应用到特定路由
  • 依赖项API密钥验证中间件

Scenario: 保护海报生成端点

  • 当请求POST /api/v1/poster端点时
  • 系统应验证API密钥

Scenario: 保护PDF生成端点

  • 当请求POST /api/v1/pdf端点时
  • 系统应验证API密钥

Scenario: 不保护健康检查端点

  • 当请求GET /status端点时
  • 系统不应要求API密钥验证

Requirement: 错误响应处理

  • 描述SHALL 系统应返回适当的标准错误响应,而不泄露敏感信息
  • 验证方法:错误响应不应揭示认证失败的具体原因
  • 依赖项API密钥验证

Scenario: 无效凭证响应

  • 当提供无效API密钥时
  • 系统应返回标准的401未授权响应
  • 响应体应包含通用错误消息,不透露认证失败的详细原因

Scenario: 缺失凭证响应

  • 当请求缺少API密钥时
  • 系统应返回标准的401未授权响应
  • 响应体应包含通用错误消息,不透露认证失败的详细原因

MODIFIED Requirements

Requirement: API端点定义

  • 描述MUST 现有的POST /api/v1/poster和POST /api/v1/pdf端点需要修改以包含认证要求
  • 验证方法端点应验证API密钥后才处理业务逻辑
  • 关联API密钥验证

Scenario: 成功认证的海报生成

  • 当请求POST /api/v1/poster包含有效API密钥时
  • 端点应继续执行海报生成逻辑
  • 应返回与之前相同的响应格式和内容

Scenario: 成功认证的PDF生成

  • 当请求POST /api/v1/pdf包含有效API密钥时
  • 端点应继续执行PDF生成逻辑
  • 应返回与之前相同的响应格式和内容