AMD 显卡推理服务接入 one-api 中转站时鉴权请求头重复的修复方法

文章导读
接入 one-api 中转站后,AMD 显卡推理服务如果返回 401/403,或者日志里出现两个 Authorization 头,通常不是硬件或驱动问题,而是中转站和推理服务两边各自维护 token,转发时叠加成两个鉴权头。修复的要点是让 one-api 在向上游转发时只携带一种凭据,而不是在推理代码里硬删请求头。
📋 目录
  1. A 先确认两套鉴权分别落在哪里
  2. B 让 one-api 只携带一种鉴权凭据
  3. C 验证方式与风险边界
A A

接入 one-api 中转站后,AMD 显卡推理服务如果返回 401/403,或者日志里出现两个 Authorization 头,通常不是硬件或驱动问题,而是中转站和推理服务两边各自维护 token,转发时叠加成两个鉴权头。修复的要点是让 one-api 在向上游转发时只携带一种凭据,而不是在推理代码里硬删请求头。

请求头重复多半是 one-api 与推理服务各自配置了 API Key,转发时叠加了两个 Authorization。修复方向:在 one-api 的渠道密钥中填入推理服务认可的 token,关闭推理服务的自鉴权或统一请求头。改动前先直接请求推理服务确认它要什么凭据,改动后捕获实际请求头验证只剩一个。关闭自鉴权只适用于受控内网。

先确认两套鉴权分别落在哪里

先做两个检查:直接请求推理服务,确认它自己是否要求 API Key;再从 one-api 中转一条请求,观察出口请求头。

# 直接请求推理服务,确认服务启用鉴权后需要的令牌
curl -s -o /dev/null -w "%{http_code}\n" http://127.0.0.1:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <推理服务令牌>" \
  -d '{"model":"你的模型","messages":[]}'

上面命令如果服务返回正常响应,说明所用的令牌就是服务端认可的。接下来从 one-api 入口发一条请求,并开启详细输出:

curl -v http://one-api.example.com/v1/chat/completions \
  -H "Authorization: Bearer <one-api令牌>" \
  -H "Content-Type: application/json" \
  -d '{"model":"one-api配置的模型名","messages":[]}'

重点看 -v 输出里 > Authorization: ... 的内容,以及最终报错中是否有多个 Authorization。也可以用 tcpdump 抓 8000 端口的数据包,看实际到达推理服务的 header。这一步能明确哪个 token 是 one-api 代你生成的,哪个是原样保留下来的。

AMD 显卡推理服务接入 one-api 中转站时鉴权请求头重复的修复方法

让 one-api 只携带一种鉴权凭据

第一选择:让渠道密钥与推理服务的 token 对齐

在 one-api 后台找到该 AMD 推理服务对应的渠道,把“密钥”字段填成直接请求时验证成功的 token,渠道类型选择 OpenAI 兼容的对应类型。多数 one-api 版本会用渠道密钥重新构造上游请求,所以不用再额外写 Authorization 到请求头。如果改动后还重复,检查该渠道的“自定义请求头/headers”配置里是否残留了之前手填的认证信息,先删掉。

第二选择:在隔离网络中关闭推理服务的自鉴权

如果推理服务只监听 127.0.0.1 或内网专网,外部无法直接访问,可以关闭推理服务自身的 API Key 校验。这样 one-api 转发时携带的任何 Authorization 头都是唯一的。关闭鉴权前务必确认监听地址和防火墙规则,不要在 0.0.0.0 上关闭鉴权,否则模型会被任意调用。

AMD 显卡推理服务接入 one-api 中转站时鉴权请求头重复的修复方法

第三选择:在 one-api 中用自定义请求头覆盖

如果渠道类型或 one-api 版本导致它不以渠道密钥替换 Authorization,可以在该渠道的“请求头/headers”配置里写入下面这段,指定唯一的上游令牌:

{
  "Authorization": "Bearer <推理服务令牌>"
}

这是最后手段,因为“覆盖”不等于“去重”,某些版本仍可能附加默认 Authorization。具体字段入口以 one-api 当前版本的界面为准,改完需要按下面方法验证。

验证方式与风险边界

改动后按这些步骤收尾:

AMD 显卡推理服务接入 one-api 中转站时鉴权请求头重复的修复方法
  • 再走一次 one-api 的中转请求,用 curl -v 或 one-api 日志确认上游请求里只有一条 Authorization 头。
  • 如果 one-api 与推理服务不在同一台机器,可在推理服务侧抓包或查看服务日志,确认到达的请求头。
  • 连续请求 2 到 3 个不同模型,排除单个模型命中了旧的自定义头。
  • one-api 若有配置缓存或连接复用,有时需要重启 one-api 进程或重新保存渠道才能生效。

风险边界:关闭推理服务自鉴权后,端口一旦暴露到公网,模型接口就可被任意访问;自定义 Authorization 头如果填错值,可能让 one-api 向推理服务发送非法认证,反而更难排查。如果以上改动后仍报 401/403,回到直接请求推理服务的那个步骤,先确认服务本身能独立跑通,再检查网关配置。

AMD 显卡与这个问题的关联只在推理服务的启动与性能层,不影响 HTTP 鉴权头的拼装。