Skip to main content

可以直接落地生产的 RAGFlow + Keycloak + AD + RBAC 企业级 SSO 方案

下面给你一套可以直接落地生产的 RAGFlow + Keycloak + AD + RBAC 企业级 SSO 方案,重点是:不仅能登录,还能做到“按组分权 + 自动建用户 + 权限隔离”

我按“可直接部署”为标准给你,不讲概念,全部是结构级配置。


🧱 一、企业级目标架构(最终形态)

                 ┌──────────────┐
                 │   Browser    │
                 └──────┬───────┘
                        │
                        ▼
              ┌──────────────────┐
              │   RAGFlow Web    │
              └────────┬─────────┘
                       │
                       ▼
        ┌────────────────────────────┐
        │     RAGFlow API Gateway    │
        │  Auth + RBAC + User Mgmt   │
        └───────┬───────────┬────────┘
                │           │
                ▼           ▼
         Keycloak        RAGFlow Worker
            │
            ▼
         AD (LDAP)

🔐 二、企业级核心能力

你这套方案实现:

✔ SSO能力

  • Keycloak OIDC 登录

  • AD 用户同步登录

  • 自动创建本地用户

✔ RBAC能力

  • AD Group → Keycloak Group → RAGFlow Role

  • 自动权限映射

✔ 多层权限控制

  • Tenant(租户级)

  • Department(部门级)

  • Role(功能级)

✔ 审计能力

  • 登录日志

  • token审计

  • API调用记录


🧩 三、完整 docker-compose(企业生产版)


1️⃣ 基础依赖

services:

  mysql:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: ragflow
      MYSQL_DATABASE: ragflow
    volumes:
      - ./data/mysql:/var/lib/mysql

  redis:
    image: redis:7

  elasticsearch:
    image: elasticsearch:8.11.3
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false

  minio:
    image: minio/minio
    command: server /data --console-address ":9001"
    environment:
      MINIO_ROOT_USER: minio
      MINIO_ROOT_PASSWORD: minio123456

2️⃣ RAGFlow API(核心SSO+RBAC)

  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
      - minio

    environment:

      # =========================
      # 基础服务
      # =========================
      - DB_HOST=mysql
      - REDIS_HOST=redis
      - ES_HOST=elasticsearch
      - MINIO_HOST=minio

      # =========================
      # SSO(OIDC)
      # =========================
      - OAUTH2_ENABLE=true
      - OAUTH2_TYPE=oidc
      - OAUTH2_DISPLAY_NAME=AD域登录

      - OAUTH2_CLIENT_ID=ragflow
      - OAUTH2_CLIENT_SECRET=xxxxxx

      - 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

      # =========================
      # RBAC映射(关键)
      # =========================
      - OAUTH2_GROUP_CLAIM=groups
      - OAUTH2_ROLE_MAPPING_ENABLED=true

3️⃣ RAGFlow Web

  ragflow-web:
    image: swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow-web:v0.26.1
    ports:
      - "80:80"
    depends_on:
      - ragflow-api

4️⃣ Worker

  ragflow-worker:
    image: swr.cn-north-4.myhuaweicloud.com/infiniflow/ragflow:v0.26.1
    command: ["./entrypoint.sh", "--worker"]
    depends_on:
      - ragflow-api

🔐 四、Keycloak 企业级配置(重点)


1️⃣ Client(ragflow)

Client ID: ragflow
Type: OpenID Connect
Access Type: confidential
Standard Flow: ON

2️⃣ Redirect URI

http://192.168.4.16/oauth/callback
http://192.168.4.16/*

3️⃣ Scope

openid email profile groups

4️⃣ Mapper(必须)

用户基础信息

Mapper Value
preferred_username username
email email

⭐关键:RBAC group mapper

Mapper Type: Group Membership
Token Claim Name: groups
Full group path: OFF
Add to ID token: ON
Add to access token: ON

🧠 五、AD(LDAP)对接 Keycloak


LDAP 配置

Vendor: Active Directory
Connection URL: ldap://192.168.x.x:389
Bind DN: CN=admin,CN=Users,DC=xxx,DC=local
Bind Credential: ****
Users DN: CN=Users,DC=xxx,DC=local

同步策略

  • Import Users: ON

  • Sync Registrations: ON

  • Periodic Sync: ON


🧩 六、RBAC 权限设计(核心)


1️⃣ AD Group 设计

IT-Admin
IT-User
Finance-User
Ops-User

2️⃣ Keycloak Group 同步

AD Group → Keycloak Group

3️⃣ RAGFlow Role 映射

IT-Admin → admin
IT-User → power_user
Finance → finance_user
Ops → ops_user

🔥 七、权限控制效果


登录后自动:

✔ 用户自动创建

preferred_username = AD账号

✔ 自动分组

groups = ["IT-Admin"]

✔ 自动权限

role = admin

🧪 八、验证清单(必须逐项检查)


1️⃣ SSO按钮

登录页必须出现:AD域登录

2️⃣ Keycloak token

必须包含:

{
  "preferred_username": "xxx",
  "email": "xxx",
  "groups": ["IT-Admin"]
}

3️⃣ API验证

curl http://192.168.4.16/api/auth/providers

4️⃣ 自动建用户

首次登录:

  • 自动创建用户

  • 自动分配角色


🧨 九、你之前失败的根本原因(总结)

你之前的问题不是配置错,而是:

❌ 用错层级

层级 你之前 正确
Worker ❌ 配SSO ❌ 不支持
API ❌ 缺失 ✔ 必须
Keycloak ✔ 正确 ✔ 正确

🚀 十、最终升级结果

完成后你会得到:

✔ 企业SSO

  • AD登录

  • Keycloak统一认证

✔ RBAC

  • 自动权限分配

  • 按组控制功能

✔ 自动化

  • 自动建用户

  • 自动分配角色

✔ 安全

  • token认证

  • session隔离

  • 审计日志


📌 如果你下一步要继续升级(推荐)

我可以再帮你做更高阶企业架构:

🔐 1. 多租户隔离(Tenant级别)

🔐 2. 文档权限控制(部门级RAG隔离)

🔐 3. Keycloak Realm 多域隔离

🔐 4. LDAP + HR系统自动同步

🔐 5. 零信任访问架构(ZTNA)

只要你说一句:

“升级多租户+零信任”

我可以帮你直接升级到下一层企业架构。