微信扫码
添加专属顾问
我要投稿
探索Dify社区版在多租户架构下的SSO功能实现,掌握企业级智能体平台的构建要领。 核心内容: 1. Dify社区版多租户智能体平台基础功能与商业化应用限制 2. SSO在企业级应用中的重要性及其核心流程解析 3. Dify SSO的技术实现细节与配置关键步骤
在多租户架构的支持下,dify社区版已经具备了企业级智能体平台的基础功能。企业或个人用户只需对代码进行简单的定制化开发,即可基于Dify平台构建自己的多租户智能体平台。然而,在商业化应用中,需要特别注意Dify社区版的一些限制,建议提前规划并做出适当的调整。
单点登录(SSO)是企业级平台中不可或缺的核心功能之一。通过SSO,企业用户可以在不同应用间实现无缝登录,避免重复认证,提高用户体验和安全性。在此功能的支持下,企业可以将智能体平台扩展到各种场景中,用户只需登录一次,即可访问其权限范围内的所有智能体应用。
不过,在Dify社区版中,SSO功能是默认禁用的,除非你知道如何开启它。
Dify的SSO逻辑设计
Dify的SSO系统基于企业级的功能需求设计,采用集中认证服务来实现用户的单点登录。通过这种方式,用户仅需登录一次即可访问多个关联的应用,极大地简化了认证流程。下面简要介绍Dify SSO的核心流程。
Dify SSO 核心流程
1.用户访问受保护资源
用户尝试访问集成到 Dify SSO 体系的应用(如应用 A),若未登录,应用 A 将用户重定向至 Dify 的中央认证服务(SSO 系统)。
2.身份验证
用户在 SSO 系统的登录页面输入凭据(如账号密码),Dify 验证通过后生成一个加密的 身份凭证(如 JWT 令牌或 Session Cookie)。
3.凭证传递与验证
方式一(Cookie):Dify 在用户浏览器设置一个 跨域安全 Cookie,后续访问其他应用时自动携带此 Cookie 完成验证。
方式二(Token):生成 JWT 令牌并通过 URL 参数或 HTTP Header 传递给应用,应用通过 Dify 的 API 验证令牌有效性。
4.多应用无缝访问
用户访问其他应用(如应用 B)时,应用 B 检测到未登录状态后重定向至 Dify SSO。由于浏览器已存在有效凭证,SSO 直接授权并重定向回应用 B,无需重复登录。
5.单点登出(SLO)
用户登出任意应用时,该应用通知 Dify SSO 清除全局会话,Dify 触发所有关联应用同步注销。
Dify SSO 的技术实现
协议支持:支持 OAuth 2.0、SAML 等标准协议,可集成企业 AD/LDAP 或第三方身份提供商(如 Okta、Azure AD)。
安全性:通过 HTTPS 加密通信,令牌采用签名验证防止篡改,支持短期令牌自动刷新。
企业级功能:在 Dify 企业版中,SSO 结合 RBAC(基于角色的访问控制),实现细粒度权限管理。
配置 Dify SSO 的关键步骤
1.启用 SSO 服务:在 Dify 社区版中配置 SSO 。
2.应用集成:为每个子应用分配唯一标识符,设置回调地址和权限范围。
3.会话管理:定义令牌有效期、单点登出策略及审计日志。
尽管Dify社区版默认不启用SSO功能,但你可以通过以下步骤开启并配置企业级的SSO服务:
首先,你需要修改 EnterpriseFeatureConfig 配置文件,启用企业级功能。
class EnterpriseFeatureConfig(BaseSettings):"""Configuration for enterprise-level features.**Before using, please contact business@dify.ai by email to inquire about licensing matters.**"""ENTERPRISE_ENABLED: bool = Field(description="Enable or disable enterprise-level features.""Before using, please contact business@dify.ai by email to inquire about licensing matters.",default=False,)CAN_REPLACE_LOGO: bool = Field(description="Allow customization of the enterprise logo.",default=False,)
企业的单点登录(SSO)配置信息
@classmethoddef _fulfill_params_from_enterprise(cls, features):enterprise_info = EnterpriseService.get_info()if "sso_enforced_for_signin" in enterprise_info:features.sso_enforced_for_signin = enterprise_info["sso_enforced_for_signin"]if "sso_enforced_for_signin_protocol" in enterprise_info:features.sso_enforced_for_signin_protocol = enterprise_info["sso_enforced_for_signin_protocol"]if "sso_enforced_for_web" in enterprise_info:features.sso_enforced_for_web = enterprise_info["sso_enforced_for_web"]if "sso_enforced_for_web_protocol" in enterprise_info:features.sso_enforced_for_web_protocol = enterprise_info["sso_enforced_for_web_protocol"]if "enable_email_code_login" in enterprise_info:features.enable_email_code_login = enterprise_info["enable_email_code_login"]if "enable_email_password_login" in enterprise_info:features.enable_email_password_login = enterprise_info["enable_email_password_login"]if "is_allow_register" in enterprise_info:features.is_allow_register = enterprise_info["is_allow_register"]if "is_allow_create_workspace" in enterprise_info:features.is_allow_create_workspace = enterprise_info["is_allow_create_workspace"]if "license" in enterprise_info:license_info = enterprise_info["license"]if "status" in license_info:features.license.status = LicenseStatus(license_info.get("status", LicenseStatus.INACTIVE))if "expired_at" in license_info:features.license.expired_at = license_info["expired_at"]
检查 enterprise_info 中是否有键 "sso_enforced_for_signin",如果有,将其值赋给 features.sso_enforced_for_signin。这表明是否启用强制单点登录(SSO)来进行用户登录
检查是否有键 "sso_enforced_for_signin_protocol",并将其值赋给 features.sso_enforced_for_signin_protocol。这表明是否使用特定的协议(如 OAuth、SAML 等)来进行登录。
检查 enterprise_info 中是否有键 "sso_enforced_for_web",并将其值赋给 features.sso_enforced_for_web。这表示是否强制 Web 应用使用单点登录(SSO)。
检查是否有键 "sso_enforced_for_web_protocol",并将其值赋给 features.sso_enforced_for_web_protocol,表示 Web 应用使用的 SSO 协议。
from services.enterprise.base import EnterpriseRequestclass EnterpriseService:@classmethoddef get_info(cls):return EnterpriseRequest.send_request("GET", "/info")@classmethoddef get_app_web_sso_enabled(cls, app_code):return EnterpriseRequest.send_request("GET", f"/app-sso-setting?appCode={app_code}")
写在最后
Dify的多租户架构为企业级智能体平台的构建提供了强大的支持,而SSO(单点登录)功能则是这一架构中不可或缺的关键一环。企业在打造自己的智能体平台时,必须重视并配置SSO相关功能,以确保用户能够以单一身份登录,方便地在不同应用间无缝切换。特别是对于面向企业用户的商业版本,启用SSO不仅是提升用户体验的必要条件,也是确保企业级平台安全性和易用性的重要措施。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2025-10-16
告别升级噩梦:Dify 二次开发的无缝适配策略与实战案例(基于 v1.9.1)
2025-10-13
用Dify搭建企业知识库:5个实战技巧提升检索准确率90%
2025-10-13
Dify接口调用实战指南:从入门到精通的避坑手册,收藏了!
2025-10-12
Dify1.6.0升级1.9.1步骤及踩坑记
2025-10-10
用 Dify 零代码搭建 AI 用研助理,5分钟完成100个虚拟用户调研
2025-09-30
重大消息,刚刚Dify 1.9.1发布了!我们聊聊带来了哪些吸引人的功能特性?
2025-09-26
内网环境下Dify1.9.0版本镜像构建过程记录
2025-09-23
刚刚Dify 1.9.0正式发布,快看看有哪些新变化?
2025-10-13
2025-09-03
2025-09-16
2025-09-06
2025-08-19
2025-09-23
2025-09-02
2025-08-18
2025-09-04
2025-09-04
2025-09-30
2025-09-23
2025-09-06
2025-09-05
2025-08-29
2025-08-18
2025-08-02
2025-07-30