🔐 双 OAuth 配置(Microsoft 和 Google)
非官方变通方案
此配置是社区贡献的变通方案,未获得 Open WebUI 团队的官方支持。虽然它在当前版本中有效,但在未来的更新中其行为可能会发生变化。本教程仅供高级用户参考演示。
概述
尽管 Open WebUI 官方在同一时间仅支持通过 OPENID_PROVIDER_URL 变量配置一个 OpenID Connect (OIDC) 提供商,但我们可以同时支持 Microsoft 和 Google。
其诀窍在于利用 Open WebUI 对特定提供商的内置支持,将一个提供商(例如 Microsoft)配置为主 OIDC 提供商,而将另一个(例如 Google)配置为标准的 OAuth 提供商。
前提条件
- 访问您的 Open WebUI 环境变量(Docker 或本地)。
- 来自 Google Cloud Console 和 Microsoft Azure/Entra ID 的 Client ID 和 Client Secret。
- 必须启用
OAUTH_MERGE_ACCOUNTS_BY_EMAIL=true,以确保无论使用哪种提供商,用户都会被映射到同一个账户。
配置逻辑
Open WebUI 将 OPENID_PROVIDER_URL 用作 OIDC 的通用“捕获一切”的入口。然而,它也拥有针对 Google 和 Microsoft 的原生模块。通过将 OPENID_PROVIDER_URL 留给 Microsoft,并仅为 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>
# 可选:在刷新 token 请求中包含 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 登录”,都能登录到同一个个人资料中。
问题排查
- 重定向不匹配 (Redirect Mismatch):确保您在两个控制台中的 Redirect URI 都与您的
WEBUI_URL相匹配。 - 合并失败 (Merge Failures):仔细检查
OAUTH_MERGE_ACCOUNTS_BY_EMAIL是否已设置为true。 - Microsoft 注销 (Microsoft Logout):Microsoft 通常需要
OPENID_PROVIDER_URL才能正确处理注销重定向。如果注销失败,请确保此 URL 对您的租户是正确的。 - Azure AD 刷新 Token 失败 (
AADSTS90009):如果 Token 刷新失败并报错“Application is requesting a token for itself”,请设置OAUTH_REFRESH_TOKEN_INCLUDE_SCOPE=true。Azure AD 要求在刷新 Token 请求中显式包含 scope。您可能还需要设置MICROSOFT_OAUTH_SCOPE以包含offline_access和任何自定义 API scope。