网关认证 & 上游认证
网关认证
网关认证决定一条请求是否允许继续进入 Aidy 的治理与转发链路。
当前 PG runtime 的认证优先级固定为:
routes.disable_auth = trueroutes.passthrough_auth_token = trueroutes.legacy_bearer_auth_tokens非空- 默认走
consumer_api_keys
如果某条 route 最终没有装配任何认证插件,请求会被允许通过。
disable_auth
当 route 设置 disable_auth = true 时,直接跳过所有认证。
适合:
- 内网联调
- 明确不需要客户端鉴权的 route
- 临时排障
passthrough_auth_token
当 route 开启 passthrough_auth_token = true 时:
- 本地认证直接放行
- Aidy 不消费客户端传入的
Authorization - 转发给上游时会保留原始
Authorization
这是一个兼容开关,不建议作为长期主认证模型扩展。
legacy_bearer_auth_tokens
当 route 配置了 legacy_bearer_auth_tokens,且未命中前两个分支时,会按 route 自带的 Bearer Token 列表做认证:
Authorization: Bearer <token>
行为:
- 命中列表则通过
- 不命中返回 OpenAI 风格
401 - 认证结束后会消费掉该
Authorization
consumer_api_keys
默认认证链路是 consumer_api_keys:
Authorization: Bearer <api-key>
运行时会:
- 根据完整
key查到consumer_api_keys - 关联到
consumers - 检查 key 和 consumer 是否属于当前 tenant
多认证插件语义
认证插件支持同时存在多个,组合语义是 AND:
- 所有认证插件都返回成功,请求才通过
- 只要有一个失败,请求就失败
上游认证
上游认证和网关认证是两条不同链路。
当前上游凭证存放在 upstreams.api_keys JSON 数组中,而不是独立表。
运行时会把每个 upstream 的可用 api_keys 展开成独立候选。
如果 upstream 没有任何 key,会补一个“空 token 候选”。
这些候选会按顺序进入真正的转发与 fallback。
可用 key 的筛选条件是:
disabled_at IS NULLexpires_at未过期key非空
排序规则:
upstream.priority越大越优先;不同优先级之间始终是高优先级在前upstream_api_key继承所属 upstream 的优先级,不再有独立优先级语义- 仅在同优先级内,按
upstream_api_key.lb_weight优先、否则回退到upstream.lb_weight做加权随机无放回排序 - 单次请求最多保留前
route.max_attempts个候选;默认2
被命中的候选 key 会写入转发时使用的上游 token。