issue: Expired oauth token being sent to OpenAI compatible API

这个报错通常出现在 Open WebUI 通过 OpenAI 兼容连接向自建 API 转发 OAuth 凭据时,后端拿到的是登录时写入、之后不再刷新的旧 oauth_id_token cookie,因此 token 过期后仍被继续发送。优先排查是否启用了 Forward cookies,以及是否还依

快速结论:这个报错通常出现在 Open WebUI 通过 OpenAI 兼容连接向自建 API 转发 OAuth 凭据时,后端拿到的是登录时写入、之后不再刷新的旧 oauth_id_token cookie,因此 token 过期后仍被继续发送。优先排查是否启用了 Forward cookies,以及是否还依赖 oauth_id_token cookie 做鉴权。

适用环境:Open WebUI v0.11.3,Docker 安装,macOS。Issue 未提供 Ollama、Python、CUDA、显卡或浏览器版本信息。

最快修复方案:设置 ENABLE_OAUTH_ID_TOKEN_COOKIE=false,并让 API 服务端改为从 Authorization 请求头读取 token 完成鉴权。

注意事项:Issue 中维护者确认 System OAuth 认证类型发送的 access token 自 v0.11.0 起会在过期前自动刷新,因此 Authorization 头中的 token 不是问题来源;如果 API 服务端必须依赖 id_token 的 claims,目前没有哪种连接认证类型能满足这一需求。相关旧 Issue 也指出刷新逻辑只考虑 access_token 过期时间、忽略 id_token JWT 过期时间,这属于另一条相关线索,需结合自身部署确认。

问题场景

用户在 Open WebUI v0.11.3(Docker 部署于 macOS)中配置了一个启用了 OAuth 的 OpenAI 兼容连接。运行一段时间后,Open WebUI 会把过期的 OAuth token 发给该 OpenAI 兼容 API 服务端,导致服务端收到的凭据失效。用户通过抓取 OpenAI 兼容 API 服务端上的 cookie,检查 oauth_id_token 的有效性,复现了“事后发送无效 token”的现象。

报错原文

issue: Expired oauth token being sent to OpenAI compatible API

When forwarding system user OAuth access token to authenticate as the Auth method for a OpenAI compatible connection, Open Webui will send an expired oauth token after sometime.

Expected Behavior: Every oauth token being sent to the API should be valid.

Actual Behavior: An expired token is being sent.

原因分析

维护者在评论中确认:真正的问题不是 Authorization 头里的 token。使用 System OAuth 认证类型时,连接发送的是 access token,并且自 v0.11.0 起(v0.11.3 已包含该逻辑)会在过期前自动刷新。

用户实际观测到的是遗留的 oauth_id_token cookie。这个 cookie 只在登录时写入一次,之后不会刷新,因此当 IdP 签发的 id_token 过期后它就会变成过期值。这是该 cookie 的既定行为,官方建议是禁用它。它之所以会到达 API 服务端,是因为该连接启用了 Forward cookies。

环境排查

  • 确认 Open WebUI 版本,Issue 中为 v0.11.3;v0.11.0 起 System OAuth 的 access token 刷新逻辑已存在。
  • 确认安装方式,Issue 中为 Docker。
  • 确认操作系统,Issue 中为 macOS。
  • 确认 OpenAI 兼容连接是否启用了 Forward cookies。
  • 确认是否设置或依赖 oauth_id_token cookie 做鉴权。
  • 确认 API 服务端从哪个位置读取凭据:Authorization 请求头,还是 cookie。
  • Issue 未提供 Ollama、Python、CUDA、PyTorch 或显卡信息,这些项无需作为本次排查前提。

解决步骤

  1. 在 Open WebUI 部署中关闭 oauth_id_token cookie,即设置 ENABLE_OAUTH_ID_TOKEN_COOKIE=false。这是维护者给出的推荐做法。
  2. 修改 OpenAI 兼容 API 服务端的鉴权逻辑,改为从 Authorization 请求头读取 token 并校验,而不再依赖 cookie 中的 id_token。
  3. 如果连接上启用了 Forward cookies,且当前并不需要把 cookie 转发给该 API,可一并检查该开关是否会继续把旧的 oauth_id_token 带到服务端。
  4. 重新登录或重启后重新发起请求,让服务端只能从 Authorization 头获取凭据,避免继续读取旧 cookie。

验证方法

改动后重新向该 OpenAI 兼容连接发起请求,在 API 服务端确认收到的凭据来自 Authorization 请求头,并且该 token 在过期后会由 Open WebUI 自动刷新。若之前抓取 cookie 中 oauth_id_token 的位置不再出现过期 token,或服务端不再因读取该 cookie 而鉴权失败,说明问题已按维护者建议的方式规避。

参考来源

open-webui/open-webui #30290

相关旧 Issue(由 Issue 自动关联):

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 24669

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注