跳到主要内容

🔐 双 OAuth 配置(Microsoft 与 Google)

非官方变通方案

此配置是社区贡献的变通方案,Open WebUI 团队不提供官方支持。虽然在当前版本中可用,但行为可能在未来版本中发生变化。本教程面向高级用户,仅作演示用途。

概述

虽然 Open WebUI 官方仅通过 OPENID_PROVIDER_URL 变量一次支持一个 OpenID Connect (OIDC) 提供商,但可以同时支持 MicrosoftGoogle

技巧是将一个提供商(例如 Microsoft)配置为主 OIDC 提供商,将另一个(例如 Google)配置为标准 OAuth 提供商,利用 Open WebUI 对特定提供商的内置支持。

前提条件

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

配置逻辑

Open WebUI 使用 OPENID_PROVIDER_URL 作为 OIDC 的通用"兜底"方案。但它也为 Google 和 Microsoft 提供了原生模块。通过为 Microsoft 保留 OPENID_PROVIDER_URL 并仅为 Google 提供 Client 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

# 可选:Microsoft OAuth 的自定义 scope(在使用自定义 API scope 时必填)
# MICROSOFT_OAUTH_SCOPE=openid email profile offline_access api://<Application ID URI>/<custom_scope>

# 可选:在刷新令牌请求中包含 scope(某些 Azure AD 配置需要)
# OAUTH_REFRESH_TOKEN_INCLUDE_SCOPE=true

# 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 对您的租户是正确的。
  • Azure AD 刷新令牌失败(AADSTS90009:如果令牌刷新时出现"应用程序正在为自身请求令牌"的错误,请设置 OAUTH_REFRESH_TOKEN_INCLUDE_SCOPE=true。Azure AD 要求在刷新令牌请求中明确包含 scope。您可能还需要将 MICROSOFT_OAUTH_SCOPE 设置为包含 offline_access 和任何自定义 API scope。
本内容仅供参考,不构成任何保证、担保或合同承诺。Open WebUI 按“现状”提供。请参阅您的许可协议 以了解适用条款。