🔐 双 OAuth 配置(Microsoft 与 Google)
非官方变通方案
此配置是社区贡献的变通方案,Open WebUI 团队不提供官方支持。虽然在当前版本中可用,但行为可能在未来版本中发生变化。本教程面向高级用户,仅作演示用途。
概述
虽然 Open WebUI 官方仅通过 OPENID_PROVIDER_URL 变量一次支持一个 OpenID Connect (OIDC) 提供商,但可以同时支持 Microsoft 和 Google。
技巧是将一个提供商(例如 Microsoft)配置为主 OIDC 提供商,将另一个(例如 Google)配置为标准 OAuth 提供商,利用 Open WebUI 对特定提供商的内置支持。
前提条件
- 访问您的 Open WebUI 环境变量(Docker 或本地)。
- 来自 Google Cloud Console 和 Microsoft 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工作原理
- Microsoft 通过通用 OIDC 流程处理,因为
OPENID_PROVIDER_URL已设置为 Microsoft 端点。 - Google 通过专用的内置 Google OAuth 模块处理,因为系 统检测到
GOOGLE_CLIENT_ID,而全局OPENID_PROVIDER_URL已被 Microsoft"占用"或内置 Google 模块根本不需要它。 - 账户合并:由于两个提供商都返回用户的邮箱,
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。