微信扫码
添加专属顾问
我要投稿
探索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)配置信息
@classmethod
def _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 EnterpriseRequest
class EnterpriseService:
@classmethod
def get_info(cls):
return EnterpriseRequest.send_request("GET", "/info")
@classmethod
def 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-03-31
Dify内置DeepResearch深度体验,抽丝剥茧带大家瞧瞧它的真实水准
2025-03-31
Dify工作流如何屏蔽DeepSeek-R1的思考内容?来看看解决方案吧!!!
2025-03-30
dify案例分享-API文档生成接口代码
2025-03-29
如何让Dify联网,以及如何关闭工作流输出
2025-03-29
Dify识别Excel内容并生成图表
2025-03-28
Dify外接Fastgpt知识库,这套组合可以说封神了!【喂饭级教程】
2025-03-28
吃瓜,Dify 被某医药IT工程师贴脸开 PR 换 Logo,喜提律师函
2025-03-28
Dify+Echarts实现数据可视化
2024-12-24
2024-04-25
2024-07-16
2024-07-20
2024-04-24
2024-06-21
2024-05-08
2024-05-09
2024-08-06
2024-11-15