🪁

4. Open WebUI 集成 Entra ID SSO

整个配置分为两大步: 1. 在 Microsoft Entra ID 中:注册一个“应用”,获取 Open WebUI 连接时所需的凭据。 2. 在 Open WebUI 中:通过 docker-compose.yml 文件配置环境变量,告诉 Open WebUI 如何使用这些凭据与 Entra ID 通信。

第一步:在 Microsoft Entra ID 中配置应用注册

  1. UI界面操作:Entra ID > App registrations
  1. 使用 Terraform
  • az login登录AAD租户
    • notion image
  • 编辑main.tf 脚本
# ---------------------------------------------------- # main.tf - 用于创建 Entra ID 应用注册 # ---------------------------------------------------- terraform { required_providers { azuread = { source = "hashicorp/azuread" version = "~> 3.5.0" } } } provider "azuread" {} data "azuread_client_config" "current" {} # 1 App 注册(v3 新资源) resource "azuread_application_registration" "open_webui" { display_name = "OpenWebUI-SSO" } # 2 回调 URI(v3 用独立资源,且可指定 type) resource "azuread_application_redirect_uris" "open_webui_web" { application_id = azuread_application_registration.open_webui.id type = "Web" redirect_uris = ["http://localhost:3000/oauth/microsoft/callback"] } # 3 App 密钥(v3 用 application_id) resource "azuread_application_password" "open_webui_secret" { application_id = azuread_application_registration.open_webui.id display_name = "OpenWebUI-Secret" } # 4 Service Principal(v3 仍用 client_id) resource "azuread_service_principal" "open_webui_sp" { client_id = azuread_application_registration.open_webui.client_id } # 输出 output "tenant_id" { value = data.azuread_client_config.current.tenant_id } output "open_webui_client_id" { value = azuread_application_registration.open_webui.client_id } output "open_webui_client_secret" { value = azuread_application_password.open_webui_secret.value sensitive = true }#terraform { required_providers { azuread = { source = "hashicorp/azuread" version = "~> 2.47.0" # 根据你的版本调整 } } } provider "azuread" { # 如果需要,可以配置 tenant_id 或使用默认凭据 } # 创建 Azure AD 应用 resource "azuread_application" "open_webui_sso" { display_name = "OpenWebUI-SSO" } # 创建应用密码 resource "azuread_application_password" "open_webui_sso_secret" { application_object_id = azuread_application.open_webui_sso.id display_name = "OpenWebUI-Secret" } # 创建 Service Principal resource "azuread_service_principal" "open_webui_sp" { client_id = azuread_application.open_webui_sso.client_id } # 输出 Client ID 和 Secret output "open_webui_client_id" { value = azuread_application.open_webui_sso.client_id } output "open_webui_client_secret" { value = azuread_application_password.open_webui_sso_secret.value sensitive = true }
Terraform 的工作流程是固定的:
  1. terraform init:这是第一步。它会初始化你的工作目录,并根据你的配置文件(main.tf)下载所有需要的插件(比如 azuread)。
notion image
  1. terraform plan:这会生成执行计划,让你看到将要执行的变更。
notion image
  1. terraform apply:这会执行计划,创建或修改资源。
  • 运行apply后terraform会自动登录 Azure 并创建好应用注册和密钥。
  • 从命令行输出中,获取到生成的 Client ID, Client SecretTenant ID
notion image

第二步:配置 Open WebUI (修改 docker-compose.yml)

现在,我们需要把从 Azure 获取到的信息配置到 Open WebUI 中。
  1. 停止当前的应用
      • 进入项目文件夹,运行 docker-compose down
  1. 编辑 docker-compose.yml 文件YAML
      • 打开 docker-compose.yml 文件。
      • 找到 open-webui 服务的 environment 部分。
      • 在其中添加以下 OIDC 相关的环境变量,并用刚刚获取的值替换掉占位符。
      # docker-compose.yml vservices: # LiteLLM 代理(转发到 Azure OpenAI) litellm: image: ghcr.io/berriai/litellm:main-stable container_name: litellm_proxy env_file: - ./.env # environment: # 如果你不想用 .env,也可以直接写死在这里: # AZURE_API_KEY: <你的 Azure OpenAI Key> # AZURE_API_BASE: https://<你的资源名>.openai.azure.com/ # AZURE_API_VERSION: 2024-12-01-preview # —— 上面三项建议放 .env,见文末模板 —— volumes: - ./litellm-config.yaml:/app/config.yaml command: ["--config", "/app/config.yaml", "--host", "0.0.0.0", "--port", "4000"] restart: unless-stopped # Open WebUI(本地 HTTP,端口 3000) open-webui: image: ghcr.io/open-webui/open-webui:dev container_name: open-webui ports: - "3000:8080" env_file: - ./.env environment: # OpenWebUI 对外地址(生产时改为域名) WEBUI_URL: http://localhost:3000 # —— Microsoft Entra ID(Azure AD)SSO ——(来自 Terraform 输出/门户) MICROSOFT_CLIENT_TENANT_ID: ${MICROSOFT_TENANT_ID} MICROSOFT_CLIENT_ID: ${MICROSOFT_CLIENT_ID} MICROSOFT_CLIENT_SECRET: ${MICROSOFT_CLIENT_SECRET} MICROSOFT_REDIRECT_URI: http://localhost:3000/oauth/microsoft/callback # 建议提供 well-known,注销/发现更稳 OPENID_PROVIDER_URL: https://login.microsoftonline.com/${MICROSOFT_TENANT_ID}/v2.0/.well-known/openid-configuration # 首次用 OAuth 允许建账号(可按需关闭) ENABLE_OAUTH_SIGNUP: "true" # 服务端 OAuth 会话加密密钥(强随机串;多实例时务必一致) OAUTH_SESSION_TOKEN_ENCRYPTION_KEY: ${OAUTH_SESSION_TOKEN_ENCRYPTION_KEY} # —— 通过 LiteLLM 调用模型 —— OPENAI_API_BASE_URL: http://litellm:4000 OPENAI_API_KEY: sk-just-a-placeholder volumes: - open-webui-data:/app/backend/data depends_on: - litellm restart: unless-stopped volumes: open-webui-data:
  1. 重新启动应用
      • 保存修改后的 docker-compose.yml 文件。
      • 运行 docker-compose up -d --force-recreate 来应用新的配置。
      notion image

第三步:验证 SSO 登录

notion image
notion image
notion image
notion image