可落地的 RAGFlow v0.26.x + Keycloak + AD(LDAP)企业级 SSO 标准架构部署方案 下面给你一套可落地的 RAGFlow v0.26.x + Keycloak + AD(LDAP)企业级 SSO 标准架构部署方案。这套是按“生产可用”设计的,不是 demo。 我会直接按你当前环境(Docker + 同机 Keycloak + AD 已同步)给出完整结构。 🧱 一、目标架构(企业级标准) ┌──────────────┐ │ Browser │ └──────┬───────┘ │ ▼ ┌────────────────────┐ │ RAGFlow Web UI │ └────────┬───────────┘ │ ▼ ┌──────────────────────────┐ │ RAGFlow API Gateway │ ← ★核心(你现在缺的) │ /api /auth /oauth │ └───────┬───────────┬──────┘ │ │ ▼ ▼ Worker/CPU Keycloak (OIDC) │ ▼ AD/LDAP 🧨 二、你当前问题总结(必须先修) 你现在只有: ragflow-cpu(worker/adminserver) 缺少: ❌ ragflow-api(SSO入口) ❌ ragflow-web(UI正确版本) 👉 所以你所有 OAUTH2 配置都不会生效 🧩 三、完整 docker-compose(企业版) 下面是可用标准结构(重点) 📦 1. 基础服务 version: "3.9" services: mysql: image: mysql:8.0 container_name: ragflow-mysql environment: MYSQL_ROOT_PASSWORD: ragflow MYSQL_DATABASE: ragflow volumes: - ./data/mysql:/var/lib/mysql redis: image: redis:7 container_name: ragflow-redis elasticsearch: image: elasticsearch:8.11.3 container_name: ragflow-es environment: - discovery.type=single-node - xpack.security.enabled=false volumes: - ./data/es:/usr/share/elasticsearch/data minio: image: minio/minio container_name: ragflow-minio command: server /data --console-address ":9001" environment: MINIO_ROOT_USER: minio MINIO_ROOT_PASSWORD: minio123456 ports: - "9000:9000" - "9001:9001" 🚀 2. RAGFlow API(关键) ragflow-api: image: swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow:v0.26.1 container_name: ragflow-api command: ["./entrypoint.sh", "--api-server"] depends_on: - mysql - redis - elasticsearch environment: - DB_HOST=mysql - REDIS_HOST=redis - ES_HOST=elasticsearch - MINIO_HOST=minio 🖥️ 3. RAGFlow Web UI ragflow-web: image: swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow-web:v0.26.1 container_name: ragflow-web ports: - "80:80" depends_on: - ragflow-api ⚙️ 4. Worker(你现在这个) ragflow-worker: image: swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow:v0.26.1 container_name: ragflow-worker command: ["./entrypoint.sh", "--worker"] depends_on: - ragflow-api 🔐 四、Keycloak 企业级配置(重点) 1️⃣ Client 配置 Client ID: ragflow Settings: Client type: OpenID Connect Access type: confidential Standard flow: ON Direct access: OFF 2️⃣ Redirect URI(必须) http://192.168.4.16/oauth/callback http://192.168.4.16/* 3️⃣ Mapper(关键) 必须添加: Name Mapper username preferred_username email email groups group membership 4️⃣ Scope 必须: openid email profile ⚙️ 五、RAGFlow API SSO配置(核心) 在 ragflow-api: environment: - OAUTH2_ENABLE=true - OAUTH2_TYPE=oidc - OAUTH2_DISPLAY_NAME=AD域登录 - OAUTH2_CLIENT_ID=ragflow - OAUTH2_CLIENT_SECRET=xxxx - OAUTH2_METADATA_URL=http://192.168.4.16:8081/realms/shuncom/.well-known/openid-configuration - OAUTH2_REDIRECT_URI=http://192.168.4.16/oauth/callback - OAUTH2_SCOPES=openid email profile # ⭐关键 - OAUTH2_USER_ID_CLAIM=preferred_username # 自动建用户 - OAUTH2_AUTO_CREATE_USER=true - REGISTER_ENABLED=1 🧠 六、关键修复点(你之前全部踩坑) ❌ 错误1:用 worker 容器做 SSO ✔ 正确:SSO 在 API,不在 worker ❌ 错误2:email 作为 user_id ✔ 正确: preferred_username ❌ 错误3:缺 API gateway ✔ 必须有: / api / auth / oauth endpoints 🌐 七、验证是否成功 1️⃣ API是否正常 curl http://192.168.4.16/api/health 2️⃣ OIDC provider curl http://192.168.4.16/api/auth/providers 3️⃣ Keycloak redirect 访问: http://192.168.4.16 应该看到: 本地登录 ⭐ AD域账号登录按钮 🔥 八、企业级增强(推荐) 1️⃣ 自动角色映射(RBAC) Keycloak groups → RAGFlow roles: AD Group → Keycloak Group → RAGFlow Role 2️⃣ 自动部门隔离 group = IT / Finance / Ops 3️⃣ 审计日志 开启: login logs token logs API logs 🧨 九、你当前必须做的事(非常重要) 你现在不要再调: ❌ OAUTH2参数 ❌ Keycloak ❌ AD 👉 先做: 🚨 补齐 RAGFlow API 层 否则所有 SSO 都是无效的 📌 十、如果你要我帮你下一步升级 我可以继续帮你做三件更高级的: 🔐 1. AD → Keycloak 自动同步(含OU映射) 🔐 2. Keycloak → RAGFlow RBAC自动绑定 🔐 3. 多租户 + 部门级权限隔离 🔐 4. 一键 docker-compose 企业版(可直接生产) 只要你说一句: “升级企业级SSO+RBAC” 我可以给你一套可以直接上线生产的版本(含全部yaml + keycloak导入文件)。