dmed05/ai-inspection-report-demo
GitHub: dmed05/ai-inspection-report-demo
一个安全的 AI 检测报告演示应用,通过 fixture 模式和受保护的参考 API 展示面向公众的安全 API 设计实践。
Stars: 0 | Forks: 0
# AI 检测报告演示
一个安全的、模拟的 AI 辅助检测工作流演示。
公开应用完全以 fixture 模式运行:它不接受真实的客户记录,不上传私人媒体文件,也不消耗 API 额度。服务器还包含一个受保护的参考 API,用于演示基于所有者作用域的记录、受限的 CORS、速率限制、保留策略和脱敏日志。
## 架构
```
browser
├─ GET /api/demo/reports ──────────────> synthetic fixtures
└─ protected /api/reports
├─ allowed-origin check
├─ bearer token → owner mapping
├─ per-client rate limit
├─ input validation
└─ owner-scoped in-memory store
```
## 本地运行
需要 Node.js 20 或更高版本。
```
npm test
npm start
```
打开 。
默认配置仅公开 fixture 数据。要在本地测试受保护的路由:
```
DEMO_API_TOKENS='reviewer:local-development-token' \
ALLOWED_ORIGINS='http://localhost:5050' \
npm start
```
示例:
```
export DEMO_TOKEN='the token configured in DEMO_API_TOKENS'
curl -H "Authorization: Bearer ${DEMO_TOKEN}" \
http://localhost:5050/api/reports
```
## 安全决策
- 公开演示无需 OpenAI 或云凭证。
- 不包含任何生产环境的姓名、地址、照片、提示词或报告。
- 公开生成是确定性的且由 fixture 支持。
- 受保护的记录根据经过身份验证的 token 进行选择,而不是客户端提供的用户 ID。
- 除非请求来源被明确允许,否则拒绝 CORS。
- 日志会对 bearer token 和常见的凭证格式进行脱敏处理。
- 记录将根据 `RETENTION_HOURS`(默认为 24)过期。
- 本地和 CI 发布门禁会拒绝密钥和敏感文件名。
本仓库是一个参考实现,而不是一个完整的身份验证系统。生产环境部署应将静态 token 和内存存储替换为身份提供程序和加密数据库。
## 测试覆盖率
测试涵盖:
- 仅限 fixture 的公开访问;
- 缺失和无效的身份验证;
- 跨所有者记录隔离;
- 受限的 CORS;
- 请求速率限制;
- 保留策略清理;
- 凭证脱敏。
## 许可证
MIT
标签:API设计, CORS, GNU通用公共许可证, MITM代理, Node.js, Syscall, Web开发, 安全实践, 数据可视化, 演示项目, 自定义脚本, 限流