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

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

目标是:

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


🧠 一、整体生产架构(必须先理解)

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

🏗️ 二、生产级部署拓扑(推荐)

你现在服务器是:

建议增加:

服务 说明
Keycloak IAM认证中心
PostgreSQL Keycloak数据库
RAGFlow 业务系统
AD 用户源

🚀 三、一键生产级 docker-compose(Keycloak + DB)

✔ 新建目录

mkdir -p /opt/sso
cd /opt/sso

✔ docker-compose.yml(生产推荐版)

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:

✔ 启动

docker compose up -d

🔐 四、Keycloak对接 AD(shuncom.local)

进入:

http://192.168.4.16:8081

✔ 创建 LDAP

路径:

User Federation → LDAP

✔ 配置(关键参数)

项目
Vendor Active Directory
Connection URL ldap://192.168.0.5
Bind DN CN=Administrator,CN=Users,DC=shuncom,DC=local
Bind Password AD密码
Users DN DC=shuncom,DC=local
Username LDAP attribute sAMAccountName

✔ 开启


✔ 测试

点击:

Test connection
Test authentication

必须全部 ✔


🔑 五、创建 RAGFlow Client(OIDC)

Keycloak:

Clients → Create

✔ 配置

项目
Client ID ragflow
Protocol openid-connect
Access Type confidential

✔ Redirect URI(非常关键)

http://192.168.4.16:9380/*

✔ 获取 Secret

Credentials → Client Secret

🧩 六、RAGFlow Docker 配置(关键)

修改你的 .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

🔄 七、完整登录流程

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

⚠️ 八、生产级关键优化(非常重要)

✔ 1. 时间同步(必须)

timedatectl set-ntp true

✔ 2. Keycloak必须固定hostname

KC_HOSTNAME=192.168.4.16
KC_PROXY=edge

✔ 3. 防止回调失败(常见坑)

确认:


✔ 4. AD账号映射策略

建议:

AD字段 Keycloak
sAMAccountName username
mail email

🧱 九、生产级增强(可选但推荐)

如果你要企业级:

🔥 1. AD Group → RAGFlow Role映射

🔥 2. 多系统SSO(GitLab / Jenkins)

🔥 3. Keycloak HA(双机)

🔥 4. LDAP Failover


🧠 十、最终推荐架构(最佳实践)

        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完整落地”

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


Revision #1
Created 27 June 2026 11:33:40 by Admin
Updated 27 June 2026 11:35:35 by Admin