# 把 Keycloak + AD + RAGFlow 做成“可生产部署版本

很好，你现在这个需求已经是**标准企业级SSO架构落地设计**了，我给你一套可以直接生产用的方案（不是demo，是能稳定跑的）。

目标是：

> ✔ Keycloak 统一认证中心  
> ✔ Windows AD（shuncom.local）作为用户源  
> ✔ RAGFlow Docker单机接入OIDC登录  
> ✔ 一套可维护、可扩展的企业架构

---

# 🧠 一、整体生产架构（必须先理解）

```text
Windows AD (192.168.0.5)
        │ LDAP
        ▼
Keycloak（SSO中心 / Identity Broker）
        │ OIDC / OAuth2
        ▼
RAGFlow（Docker单机）

```

---

# 🏗️ 二、生产级部署拓扑（推荐）

你现在服务器是：

- Ubuntu 24.04
- RAGFlow Docker 单机 ✔

建议增加：

<table id="bkmrk-%E6%9C%8D%E5%8A%A1-%E8%AF%B4%E6%98%8E-keycloak-iam%E8%AE%A4%E8%AF%81"><thead><tr><th>服务</th><th>说明</th></tr></thead><tbody><tr><td>Keycloak</td><td>IAM认证中心</td></tr><tr><td>PostgreSQL</td><td>Keycloak数据库</td></tr><tr><td>RAGFlow</td><td>业务系统</td></tr><tr><td>AD</td><td>用户源</td></tr></tbody></table>

---

# 🚀 三、一键生产级 docker-compose（Keycloak + DB）

## ✔ 新建目录

```bash
mkdir -p /opt/sso
cd /opt/sso

```

---

## ✔ docker-compose.yml（生产推荐版）

```yaml
version: '3.8'

services:

  postgres:
    image: postgres:15
    container_name: keycloak-db
    restart: always
    environment:
      POSTGRES_DB: keycloak
      POSTGRES_USER: keycloak
      POSTGRES_PASSWORD: keycloak123
    volumes:
      - pgdata:/var/lib/postgresql/data
    networks:
      - sso-net

  keycloak:
    image: quay.io/keycloak/keycloak:24.0
    container_name: keycloak
    restart: always
    command: start-dev
    environment:
      KEYCLOAK_ADMIN: admin
      KEYCLOAK_ADMIN_PASSWORD: admin123

      KC_DB: postgres
      KC_DB_URL_HOST: postgres
      KC_DB_URL_DATABASE: keycloak
      KC_DB_USERNAME: keycloak
      KC_DB_PASSWORD: keycloak123

      KC_HOSTNAME: 192.168.4.16
      KC_HTTP_ENABLED: "true"
      KC_PROXY: edge

    ports:
      - "8081:8080"

    depends_on:
      - postgres

    networks:
      - sso-net

volumes:
  pgdata:

networks:
  sso-net:

```

---

## ✔ 启动

```bash
docker compose up -d

```

---

# 🔐 四、Keycloak对接 AD（shuncom.local）

进入：

```
http://192.168.4.16:8081

```

---

## ✔ 创建 LDAP

路径：

```
User Federation → LDAP

```

---

## ✔ 配置（关键参数）

<table id="bkmrk-%E9%A1%B9%E7%9B%AE-%E5%80%BC-vendor-active-d"><thead><tr><th>项目</th><th>值</th></tr></thead><tbody><tr><td>Vendor</td><td>Active Directory</td></tr><tr><td>Connection URL</td><td>ldap://192.168.0.5</td></tr><tr><td>Bind DN</td><td>CN=Administrator,CN=Users,DC=shuncom,DC=local</td></tr><tr><td>Bind Password</td><td>AD密码</td></tr><tr><td>Users DN</td><td>DC=shuncom,DC=local</td></tr><tr><td>Username LDAP attribute</td><td>sAMAccountName</td></tr></tbody></table>

---

## ✔ 开启

- Import Users = ON
- Sync Registrations = ON
- Trust Email = ON（可选）

---

## ✔ 测试

点击：

```
Test connection
Test authentication

```

必须全部 ✔

---

# 🔑 五、创建 RAGFlow Client（OIDC）

Keycloak：

```
Clients → Create

```

---

## ✔ 配置

<table id="bkmrk-%E9%A1%B9%E7%9B%AE-%E5%80%BC-client-id-ragfl"><thead><tr><th>项目</th><th>值</th></tr></thead><tbody><tr><td>Client ID</td><td>ragflow</td></tr><tr><td>Protocol</td><td>openid-connect</td></tr><tr><td>Access Type</td><td>confidential</td></tr></tbody></table>

---

## ✔ Redirect URI（非常关键）

```text
http://192.168.4.16:9380/*

```

---

## ✔ 获取 Secret

```
Credentials → Client Secret

```

---

# 🧩 六、RAGFlow Docker 配置（关键）

修改你的 `.env`：

```env
AUTH_TYPE=oauth2

OAUTH_PROVIDER=keycloak
OAUTH_CLIENT_ID=ragflow
OAUTH_CLIENT_SECRET=xxxxxxxx

OAUTH_AUTH_URL=http://192.168.4.16:8081/realms/shuncom/protocol/openid-connect/auth
OAUTH_TOKEN_URL=http://192.168.4.16:8081/realms/shuncom/protocol/openid-connect/token
OAUTH_USERINFO_URL=http://192.168.4.16:8081/realms/shuncom/protocol/openid-connect/userinfo

OAUTH_REDIRECT_URI=http://192.168.4.16:9380/oauth/callback

```

---

# 🔄 七、完整登录流程

```text
用户访问 RAGFlow
        ↓
跳转 Keycloak
        ↓
输入 AD账号密码
        ↓
Keycloak LDAP验证 AD
        ↓
返回 Token
        ↓
RAGFlow登录成功

```

---

# ⚠️ 八、生产级关键优化（非常重要）

## ✔ 1. 时间同步（必须）

```bash
timedatectl set-ntp true

```

---

## ✔ 2. Keycloak必须固定hostname

```env
KC_HOSTNAME=192.168.4.16
KC_PROXY=edge

```

---

## ✔ 3. 防止回调失败（常见坑）

确认：

- 9380端口开放
- firewall关闭或放行

---

## ✔ 4. AD账号映射策略

建议：

<table id="bkmrk-ad%E5%AD%97%E6%AE%B5-keycloak-samacc"><thead><tr><th>AD字段</th><th>Keycloak</th></tr></thead><tbody><tr><td>sAMAccountName</td><td>username</td></tr><tr><td>mail</td><td>email</td></tr></tbody></table>

---

# 🧱 九、生产级增强（可选但推荐）

如果你要企业级：

### 🔥 1. AD Group → RAGFlow Role映射

### 🔥 2. 多系统SSO（GitLab / Jenkins）

### 🔥 3. Keycloak HA（双机）

### 🔥 4. LDAP Failover

---

# 🧠 十、最终推荐架构（最佳实践）

```text
        Windows AD
             │
             ▼
        Keycloak (SSO)
             │
     ┌───────┼────────┐
     ▼       ▼        ▼
 RAGFlow   GitLab   Jenkins

```

---

# 🚨 十一、你当前最容易踩的坑（提前提醒）

1. ❌ Keycloak没数据库（你之前已经踩过）
2. ❌ 没 start-dev
3. ❌ Redirect URI写错
4. ❌ AD LDAP Bind DN错误
5. ❌ 时间不同步导致token失败

---

# 🚀 如果你下一步要继续，我可以帮你做：

### ✔ Keycloak + AD 完整可运行配置（可复制）

### ✔ RAGFlow OIDC 一键配置文件

### ✔ Nginx HTTPS + SSO反代

### ✔ 企业统一登录架构图（含权限设计）

只要你说一句：

👉 **“我要生产级SSO完整落地”**

我可以直接给你一套“复制就能跑”的最终版本。