导语
还在为每个系统单独记密码而烦恼吗?还在担心企业内部应用账号管理混乱吗?今天,我们带来一个好消息:dify-sso
项目正式发布,为 Dify 平台带来了企业级的单点登录(SSO)解决方案!让你的 Dify 使用体验更安全、更便捷!
🤔 为什么我们需要 Dify SSO?
Dify 是一个非常出色的 LLM 应用开发平台,但在企业环境中,我们经常遇到一个痛点:账号管理。
想象一下,公司内部已经有了一套统一的身份认证系统(比如钉钉、企业微信、Okta 或自建的认证中心),员工早已习惯用这个系统登录各种办公应用。如果 Dify 需要单独注册和登录,不仅增加了员工的操作负担,也给 IT 部门带来了额外的管理成本和安全风险。
这时候,单点登录(SSO) 就派上用场了。简单来说,SSO 就像一把”万能钥匙”,员工只需要在公司的统一认证平台登录一次,就可以访问所有集成了 SSO 的内部应用,包括 Dify!
dify-sso
项目就是为了解决这个问题而诞生的。它旨在将 Dify 无缝接入企业现有的身份认证体系,实现:
- 简化登录: 用户使用熟悉的企业账号即可登录 Dify。
- 提升安全: 依赖企业统一的安全策略和认证机制。
- 高效管理: 减少 Dify 侧的账号维护工作。
✨ dify-sso
能做什么?
dify-sso
项目的核心功能是为 Dify 提供基于 OIDC (OpenID Connect) 协议的单点登录集成。OIDC 是目前业界广泛使用的身份认证标准协议,许多主流的身份提供商(IdP)都支持它。
主要特性包括:
- OIDC 标准支持: 兼容各类支持 OIDC 的身份提供商。
- 无缝登录体验: 用户点击登录后会自动跳转到企业登录页面,认证成功后自动返回 Dify。
- 用户自动创建: 当企业用户首次通过 SSO 登录 Dify 时,系统会自动为其在 Dify 中创建账号和默认租户,无需手动添加。
- 灵活配置: 通过简单的环境变量配置即可完成对接。
🚀 如何快速上手?
我们推荐使用 Docker 来快速部署和体验 dify-sso
,这对于新手来说是最简单的方式。
基本步骤:
-
创建 SSO 服务商
这里用 Authing 产品做演示,其他配置都使用默认值。
- 启动 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
- 修改 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,并完成登录!
⚠️ 特别声明
请注意,Dify 官方版本包含商业授权模式,其内置的 SSO 功能通常属于其商业计划的一部分。我们建议有条件的用户购买 Dify 商业授权。
本项目 dify-sso
是一个独立的外部集成方案,并未修改任何 Dify 官方源代码。它仅提供了一种通过标准 OIDC 协议对接企业现有身份认证系统、实现单点登录到 Dify 的可选方式,旨在方便那些已经拥有统一身份认证体系的企业用户。
我们尊重 Dify Labs 的知识产权和商业模式。如果您认为本项目的存在可能对 Dify 的商业权益产生影响,请随时联系项目作者,我们将及时沟通处理或根据要求移除本项目。
🎉 总结
dify-sso
项目为 Dify 在企业环境中的应用扫清了一大障碍。通过 OIDC 单点登录集成,企业可以更安全、更高效地管理 Dify 用户,员工也能享受到更便捷的登录体验。
如果你正在使用 Dify,并且希望将其融入企业的身份认证体系,dify-sso
绝对值得一试!
立即访问项目仓库 lework/dify-sso,了解更多详情并开始使用吧!