跳转到主要内容
查看平台级认证概览:/cn/api/authentication

身份验证

Shannon Gateway 支持两种认证方式用于所有受保护端点。

API 密钥认证

X-API-Key 请求头中包含您的 API 密钥:

Bearer Token 认证

也可使用 Authorization: Bearer 请求头传递 API 密钥或 JWT 令牌:
两种方式等效——选择适合您工具链的方式即可。

认证错误

401 未授权 - 缺少或无效的凭证:
常见原因
  • 缺少 X-API-KeyAuthorization 请求头
  • 无效的 API 密钥格式
  • 禁用的或过期的 API 密钥
  • JWT 令牌已过期

请求头

必需请求头

X-API-Key

用途:身份验证 必需:是(除非 GATEWAY_SKIP_AUTH=1格式:字符串

Content-Type(POST 请求)

用途:指定请求体格式 必需:POST 请求需要 格式application/json

可选请求头

Idempotency-Key

用途:防止重复任务提交 必需:否(推荐用于关键操作) 格式:UUID 或唯一字符串 缓存持续时间:24 小时
示例

traceparent

用途:W3C 分布式追踪 必需:否(推荐用于可观测性) 格式{version}-{trace-id}-{parent-id}-{flags}
格式规范
  • version00(当前版本)
  • trace-id:32 个十六进制字符(128 位)
  • parent-id:16 个十六进制字符(64 位)
  • flags:2 个十六进制字符(采样:01,未采样:00
示例

tracestate

用途:供应商特定的追踪上下文 必需:否 格式:逗号分隔的键值对

Cache-Control

用途:控制缓存行为 必需:否 格式:标准 HTTP 缓存指令

Last-Event-ID (SSE only)

Purpose: Resume SSE stream from a specific event Required: No Format: Event ID string — either a Redis stream ID (e.g., 1700000000000-0) or a numeric sequence (e.g., 42)
Used for SSE reconnection:

响应头

标准响应头

X-Workflow-ID

用途:Temporal 工作流标识符 出现位置:POST /api/v1/tasks、GET /api/v1/tasks/ 格式:字符串(与 task_id 相同)
用例:在 Temporal UI 中跟踪工作流执行

X-Session-ID

用途:多轮对话的会话标识符 出现位置:POST /api/v1/tasks 格式:UUID 字符串

Content-Type

用途:响应体格式 出现位置:所有 JSON 响应 格式application/json
对于 SSE:

速率限制请求头

X-RateLimit-Limit

用途:每个窗口允许的最大请求数 出现位置:所有认证请求 格式:整数

X-RateLimit-Remaining

用途:当前窗口中剩余的请求数 出现位置:所有认证请求 格式:整数

X-RateLimit-Reset

用途:速率限制重置的 Unix 时间戳 出现位置:所有认证请求 格式:Unix 时间戳(秒)
示例 - 检查速率限制

Retry-After

用途:重试前等待的秒数(429 响应) 出现位置:429 Too Many Requests 响应 格式:整数(秒)
示例 - 处理速率限制

CORS 请求头

Access-Control-Allow-Origin

用途:CORS 允许的来源 出现位置:所有响应(开发模式) 格式:域名或 *
生产环境:配置特定域名:

Access-Control-Allow-Methods

用途:允许的 HTTP 方法 出现位置:CORS 预检响应 格式:逗号分隔的方法

Access-Control-Allow-Headers

用途:允许的请求头 出现位置:CORS 预检响应 格式:逗号分隔的请求头

请求头示例

最小请求(GET)

完整请求(POST)

Python - 所有请求头

JavaScript - Fetch API

安全最佳实践

1. 保护 API 密钥

永远不要将 API 密钥提交到版本控制
存储在安全配置中

2. 在生产环境中使用 HTTPS

3. 定期轮换 API 密钥

4. 实施密钥过期

5. 监控 API 密钥使用

故障排除

认证失败

问题:收到 401 未授权 解决方案
  1. 检查是否包含 API 密钥:
  2. 验证 API 密钥格式:
  3. 检查是否禁用了认证:
  4. 在数据库中验证密钥:

速率限制问题

问题:收到 429 Too Many Requests 解决方案
  1. 检查速率限制请求头:
  2. 实施指数退避:
  3. 增加速率限制(如需要):

幂等性问题

问题:创建了重复任务 解决方案
  1. 始终包含 Idempotency-Key:
  2. 存储幂等性密钥:
  3. 检查 Redis 缓存:

相关文档

REST API 概述

完整 API 参考

提交任务

POST /api/v1/tasks

速率限制

速率限制详情

分布式追踪

追踪设置