issue: bug: OAuth 2.1 Dynamic/Static Client Registration generates HTTP redirect_uri instead of HTTPS when behind reverse proxy

Open WebUI 在反向代理后调用 OAuth 2.1 动态/静态客户端注册时,redirect_uri 被生成为容器内部地址的 http:// 链接,导致远程 OAuth 服务器以 400 拒绝。优先检查管理后台“WebUI URL”是否已设置为公网 HTTPS 地址,并确认是否曾以持久化配置

快速结论:Open WebUI 在反向代理后调用 OAuth 2.1 动态/静态客户端注册时,redirect_uri 被生成为容器内部地址的 http:// 链接,导致远程 OAuth 服务器以 400 拒绝。优先检查管理后台“WebUI URL”是否已设置为公网 HTTPS 地址,并确认是否曾以持久化配置方式覆盖过该值。

适用环境:Open WebUI v0.11.0,Docker 安装,Ollama v0.18.2,Ubuntu 22.04,Chrome 浏览器。

最快修复方案:进入 Admin Panel → Settings → General,将“WebUI URL”设置为公网 HTTPS 地址后重新注册 MCP 服务器。若此前是从未启动过的新实例,可改用环境变量 WEBUI_URL 并在首次启动前设置好(或配合 ENABLE_PERSISTENT_CONFIG=False 使用)。

注意事项:WEBUI_URL 是持久化配置项,实例启动过之后修改环境变量不生效,数据库中的值优先;需在管理后台修改或删除持久化记录。若当前实例已多次启动,仅改环境变量无法修复。

问题场景

用户通过 Docker 部署 Open WebUI(v0.11.0),前置反向代理提供 HTTPS 公网访问。在管理后台添加 MCP 工具服务器(服务地址为 https://metabase_url),触发 OAuth 2.1 动态客户端注册时,Open WebUI 没有使用公网 HTTPS 基础地址构造回调,而是使用了内部容器地址生成 HTTP 形式的 redirect_uri,远端服务器按 RFC 7591 / OAuth 2.1 规则拒绝非 loopback 的 http:// 回调,注册与授权流程均返回 400。

报错原文

2026-08-13 19:01:31.322 | ERROR    | open_webui.utils.oauth:get_oauth_client_info_with_dynamic_client_registration:615 - Dynamic client registration failed at https://metabase_url/oauth/register: 400 - {"error":"invalid_client_metadata","error_description":"Invalid redirect URI: http://open_webui/oauth/clients/mcp:metabasemcp/callback"}

2026-08-13 19:01:31.322 | ERROR    | open_webui.utils.oauth:get_oauth_client_info_with_dynamic_client_registration:621 - Error parsing client registration response: 2 validation errors for OAuthClientInformationFull
redirect_uris
...

原因分析

可能原因:Open WebUI 在构造 OAuth redirect_uri 时,优先使用持久化配置中的 WEBUI_URL;若该值为空,则回退到请求实际到达的地址。反向代理场景下请求到达后端时 Host/协议已被改写为容器内部地址和 http,因此生成了 http://open_webui/oauth/clients/... 这样的回调地址。Issue 讨论中确认 WEBUI_URL 是持久化配置项,实例启动过一次后环境变量不再生效,数据库中的值优先,这与“设置了环境变量但未生效”的现场吻合。

环境排查

  • 确认 Open WebUI 版本是否为 v0.11.0 或更高版本。
  • 确认 Docker 环境变量中是否设置了 WEBUI_URL,以及该实例是否在此之前已启动过。
  • 在管理后台查看 Settings → General → WebUI URL 当前值是否为空或为内部地址。
  • 确认反向代理是否正确传递 X-Forwarded-ProtoX-Forwarded-Host(Issue 未给出明确证据,属可能相关项)。
  • 确认 MCP 服务器(如 Metabase)是否强制要求 HTTPS 回调且拒绝 loopback 以外的 http 地址。

解决步骤

  1. 登录 Open WebUI 管理后台,进入 Settings → General → WebUI URL。
  2. 将 WebUI URL 设置为公网 HTTPS 地址(例如 https://openwebui.example.com)。
  3. 保存配置后,回到 MCP 工具服务器列表,删除之前注册失败的服务器记录。
  4. 重新添加 MCP 服务器并再次触发验证/注册流程。
  5. 若实例此前从未成功启动过(或希望环境变量立即生效),可先以 ENABLE_PERSISTENT_CONFIG=False 启动一次,确保 WEBUI_URL 环境变量被采用;之后正常持久化启动。
  6. 如果管理后台修改后仍不生效,检查数据库或持久化配置中是否残留旧 URL,清理后重启容器。

验证方法

重新触发 MCP 服务器验证或动态注册,观察 Open WebUI 容器日志中生成的 redirect_uri 是否已变为 https://公网地址/oauth/clients/mcp:metabasemcp/callback。若远端 OAuth 服务器不再返回 invalid_client_metadata / invalid_request 400 错误,且注册流程能完成跳转到 /authorize,即表示问题已解决。

参考来源

open-webui/open-webui #28555(含官方文档指引:WEBUI_URL 环境变量文档

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 18646

发表回复

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