Lework Study hard, improve every day.

告别重复登录!Dify 企业级单点登录(SSO)集成方案来了

2025-04-11
lework
ai
 
本文 4963 字,阅读全文约需 15 分钟

导语

还在为每个系统单独记密码而烦恼吗?还在担心企业内部应用账号管理混乱吗?今天,我们带来一个好消息:dify-sso 项目正式发布,为 Dify 平台带来了企业级的单点登录(SSO)解决方案!让你的 Dify 使用体验更安全、更便捷!

🤔 为什么我们需要 Dify SSO?

Dify 是一个非常出色的 LLM 应用开发平台,但在企业环境中,我们经常遇到一个痛点:账号管理

想象一下,公司内部已经有了一套统一的身份认证系统(比如钉钉、企业微信、Okta 或自建的认证中心),员工早已习惯用这个系统登录各种办公应用。如果 Dify 需要单独注册和登录,不仅增加了员工的操作负担,也给 IT 部门带来了额外的管理成本和安全风险。

这时候,单点登录(SSO) 就派上用场了。简单来说,SSO 就像一把”万能钥匙”,员工只需要在公司的统一认证平台登录一次,就可以访问所有集成了 SSO 的内部应用,包括 Dify!

dify-sso 项目就是为了解决这个问题而诞生的。它旨在将 Dify 无缝接入企业现有的身份认证体系,实现:

  1. 简化登录: 用户使用熟悉的企业账号即可登录 Dify。
  2. 提升安全: 依赖企业统一的安全策略和认证机制。
  3. 高效管理: 减少 Dify 侧的账号维护工作。

dify-sso 能做什么?

dify-sso 项目的核心功能是为 Dify 提供基于 OIDC (OpenID Connect) 协议的单点登录集成。OIDC 是目前业界广泛使用的身份认证标准协议,许多主流的身份提供商(IdP)都支持它。

主要特性包括:

  • OIDC 标准支持: 兼容各类支持 OIDC 的身份提供商。
  • 无缝登录体验: 用户点击登录后会自动跳转到企业登录页面,认证成功后自动返回 Dify。
  • 用户自动创建: 当企业用户首次通过 SSO 登录 Dify 时,系统会自动为其在 Dify 中创建账号和默认租户,无需手动添加。
  • 灵活配置: 通过简单的环境变量配置即可完成对接。

🚀 如何快速上手?

我们推荐使用 Docker 来快速部署和体验 dify-sso,这对于新手来说是最简单的方式。

基本步骤:

  1. 创建 SSO 服务商

    这里用 Authing 产品做演示,其他配置都使用默认值。

image-20250408142818633

  1. 启动 dify-sso

如果你是使用 docker-compose 启动的 Dify,需要在 docker-compose.yaml 中添加如下配置:

注意:环境变量的具体值需要根据你自身情况修改。源文件见 docker-compose.yaml

services:
  dify-sso:
    image: lework/dify-sso
    container_name: dify-sso
    restart: always
    environment:
      # 服务配置
      CONSOLE_WEB_URL: 'https://test-dify.test.com'
      SECRET_KEY: 'sk-123456'
      TENANT_ID: 'f9ea64ca-2acf-44a7-aca0-123456'
      EDITION: 'SELF_HOSTED'
      ACCESS_TOKEN_EXPIRE_MINUTES: '300'
      REFRESH_TOKEN_EXPIRE_DAYS: '30'
      REFRESH_TOKEN_PREFIX: 'refresh_token:'
      ACCOUNT_REFRESH_TOKEN_PREFIX: 'account_refresh_token:'
      # OIDC配置
      OIDC_ENABLED: 'true'
      OIDC_CLIENT_ID: '123456'
      OIDC_CLIENT_SECRET: '123456'
      OIDC_DISCOVERY_URL: 'https://test-dify.sso.test.com/oidc/.well-known/openid-configuration'
      OIDC_REDIRECT_URI: 'https://test-dify.test.com/console/api/enterprise/sso/oidc/callback'
      OIDC_SCOPE: 'openid profile email'
      OIDC_RESPONSE_TYPE: 'code'
      # 数据库配置
      DB_HOST: '127.0.0.1'
      DB_PORT: '5432'
      DB_DATABASE: 'dify'
      DB_PASSWORD: '123456'
      DB_USERNAME: 'dify_admin'
      # Redis 配置
      REDIS_DB: '13'
      REDIS_HOST: '127.0.0.1'
      REDIS_PORT: '6379'
      REDIS_PASSWORD: '123456'

如果使用的是 K8s 部署的 Dify,需要为 dify-sso 创建 deployment 文件,添加如下配置:

注意:环境变量的具体值需要根据你自身情况修改。源文件见 k8s-deployment.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: dify-sso
  labels:
    app.kubernetes.io/name: dify-sso
data:
  # 服务配置
  CONSOLE_WEB_URL: 'https://test-dify.test.com'
  SECRET_KEY: 'sk-123456'
  TENANT_ID: 'f9ea64ca-2acf-44a7-aca0-123456'
  EDITION: 'SELF_HOSTED'
  ACCESS_TOKEN_EXPIRE_MINUTES: '300'
  REFRESH_TOKEN_EXPIRE_DAYS: '30'
  REFRESH_TOKEN_PREFIX: 'refresh_token:'
  ACCOUNT_REFRESH_TOKEN_PREFIX: 'account_refresh_token:'

  # OIDC配置
  OIDC_ENABLED: 'true'
  OIDC_CLIENT_ID: '123456'
  OIDC_CLIENT_SECRET: '123456'
  OIDC_DISCOVERY_URL: 'https://test-dify.sso.test.com/oidc/.well-known/openid-configuration'
  OIDC_REDIRECT_URI: 'https://test-dify.test.com/console/api/enterprise/sso/oidc/callback'
  OIDC_SCOPE: 'openid profile email'
  OIDC_RESPONSE_TYPE: 'code'

  # 数据库配置
  DB_HOST: '127.0.0.1'
  DB_PORT: '5432'
  DB_DATABASE: 'dify'
  DB_PASSWORD: '123456'
  DB_USERNAME: 'dify_admin'

  # Redis 配置
  REDIS_DB: '13'
  REDIS_HOST: '127.0.0.1'
  REDIS_PORT: '6379'
  REDIS_PASSWORD: '123456'

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: dify-sso
  labels:
    app.kubernetes.io/name: dify-sso
spec:
  replicas: 1
  selector:
    matchLabels:
      app.kubernetes.io/name: dify-sso
  template:
    metadata:
      labels:
        app.kubernetes.io/name: dify-sso
    spec:
      containers:
        - name: dify-sso
          image: lework/dify-sso
          ports:
            - name: api
              containerPort: 8000
              protocol: TCP
          envFrom:
            - configMapRef:
                name: dify-sso
          resources:
            limits:
              cpu: '500m'
              memory: '512Mi'
            requests:
              cpu: '100m'
              memory: '128Mi'
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
          imagePullPolicy: Always
          lifecycle:
            preStop:
              exec:
                command:
                  - /bin/sh
                  - -c
                  - 'sleep 10'
          livenessProbe:
            httpGet:
              path: /health
              port: api
              scheme: HTTP
            initialDelaySeconds: 3
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 3
            timeoutSeconds: 5
          readinessProbe:
            httpGet:
              path: /health
              port: api
              scheme: HTTP
            initialDelaySeconds: 3
            periodSeconds: 10
            successThreshold: 1
            failureThreshold: 3
            timeoutSeconds: 5
      restartPolicy: Always
      terminationGracePeriodSeconds: 90
      dnsPolicy: ClusterFirst
      securityContext: {}
      schedulerName: default-scheduler
      enableServiceLinks: false
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
  revisionHistoryLimit: 5
  progressDeadlineSeconds: 600

---
apiVersion: v1
kind: Service
metadata:
  name: dify-sso
  labels:
    app.kubernetes.io/name: dify-sso
spec:
  ports:
    - name: http-api
      protocol: TCP
      port: 8000
      targetPort: api
  selector:
    app.kubernetes.io/name: dify-sso
  type: ClusterIP
  sessionAffinity: None
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  internalTrafficPolicy: Cluster
  1. 修改 Dify Nginx 配置

需要代理两个接口请求:

location ~ (/console/api/system-features|/console/api/enterprise/sso/) {
  proxy_pass http://dify-sso:8000;
  include proxy.conf;
}

完成配置后,需要重启 Dify Nginx 服务。

登录体验:

部署成功后,访问 Dify 的登录页面,你会看到一个通过 OIDC 登录的选项。点击它,浏览器会跳转到你配置的企业统一登录页面。输入你的企业账号密码并认证成功后,系统会自动跳转回 Dify,并完成登录!

86f37ee142d907b652ed0d3746f7e4d

⚠️ 特别声明

请注意,Dify 官方版本包含商业授权模式,其内置的 SSO 功能通常属于其商业计划的一部分。我们建议有条件的用户购买 Dify 商业授权

本项目 dify-sso 是一个独立的外部集成方案,并未修改任何 Dify 官方源代码。它仅提供了一种通过标准 OIDC 协议对接企业现有身份认证系统、实现单点登录到 Dify 的可选方式,旨在方便那些已经拥有统一身份认证体系的企业用户。

我们尊重 Dify Labs 的知识产权和商业模式。如果您认为本项目的存在可能对 Dify 的商业权益产生影响,请随时联系项目作者,我们将及时沟通处理或根据要求移除本项目。

🎉 总结

dify-sso 项目为 Dify 在企业环境中的应用扫清了一大障碍。通过 OIDC 单点登录集成,企业可以更安全、更高效地管理 Dify 用户,员工也能享受到更便捷的登录体验。

如果你正在使用 Dify,并且希望将其融入企业的身份认证体系,dify-sso 绝对值得一试!

立即访问项目仓库 lework/dify-sso,了解更多详情并开始使用吧!

原文地址 https://lework.github.io/2025/04/11/dify-sso/

Similar Posts

Comments