Skip to main content

🔐 双 OAuth 配置 (Microsoft 和 Google)

非官方变通方案

此配置是社区贡献的变通方案,未得到 Open WebUI 团队的正式支持。虽然它在当前版本中有效,但行为可能会在未来的更新中发生变化。本教程仅作为高级用户的演示。

概述

虽然 Open WebUI 官方仅支持通过 OPENID_PROVIDER_URL 变量同时使用一个 OpenID Connect (OIDC) 提供程序,但其实是可以同时支持 MicrosoftGoogle 的。

诀窍是将一个提供程序(例如 Microsoft)配置为主 OIDC 提供程序,而通过利用 Open WebUI 对特定提供程序的内置支持,将另一个提供程序(例如 Google)配置为标准 OAuth 提供程序。

前提条件

  • 访问您的 Open WebUI 环境变量(Docker 或本地)。
  • 来自 Google Cloud ConsoleMicrosoft Azure/Entra ID 的客户端 ID 和密钥。
  • 必须启用 OAUTH_MERGE_ACCOUNTS_BY_EMAIL=true,以确保无论使用哪个提供程序,用户都映射到同一个账户。

配置逻辑

Open WebUI 将 OPENID_PROVIDER_URL 作为 OIDC 的通用“全能型”变量。但是,它也有针对 Google 和 Microsoft 的原生模块。通过将 OPENID_PROVIDER_URL 留给 Microsoft,并仅为 Google 提供客户端 ID,系统可以内部化这两个流程。

环境变量

将以下内容添加到您的 docker-compose.yaml 或环境配置中:

# 启用注册和账户合并 (至关重要)
ENABLE_OAUTH_SIGNUP=true
OAUTH_MERGE_ACCOUNTS_BY_EMAIL=true

# 1. Microsoft 作为主 OIDC 提供程序
# 这通过 OPENID_PROVIDER_URL 使用通用的 OIDC 流程
MICROSOFT_CLIENT_ID=your_microsoft_client_id
MICROSOFT_CLIENT_SECRET=your_microsoft_client_secret
MICROSOFT_CLIENT_TENANT_ID=your_tenant_id
MICROSOFT_REDIRECT_URI=https://your-webui.com/oauth/microsoft/callback
OPENID_PROVIDER_URL=https://login.microsoftonline.com/your_tenant_id/v2.0/.well-known/openid-configuration

# 2. Google 作为辅助 OAuth 提供程序
# 注意:不要为 Google 提供 OPENID_PROVIDER_URL。
# 系统将使用其内部的 Google OAuth 实现。
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret

为什么这可行

  1. Microsoft 通过通用 OIDC 流程处理,因为 OPENID_PROVIDER_URL 设置为 Microsoft 端点。
  2. Google 通过专用的内部 Google OAuth 模块处理,因为系统检测到了 GOOGLE_CLIENT_ID,但看到全局 OPENID_PROVIDER_URL 已被 Microsoft “占用”,或者内置 Google 模块根本不需要它。
  3. 账户合并:由于两个提供程序都返回用户的电子邮件,OAUTH_MERGE_ACCOUNTS_BY_EMAIL=true 确保用户无论是点击“使用 Google 登录”还是“使用 Microsoft 登录”,都能登录到同一个个人资料。

故障排除

  • 重定向不匹配:确保两个控制台中的重定向 URI 与您的 WEBUI_URL 匹配。
  • 合并失败:仔细检查 OAUTH_MERGE_ACCOUNTS_BY_EMAIL 是否设置为 true
  • Microsoft 注销:Microsoft 通常需要 OPENID_PROVIDER_URL 才能正确处理注销重定向。如果注销失败,请确保此 URL 对您的租户是正确的。