agentic_huge_data_base / wiki
页面 Dify · 8 多租户与安全·DeepWiki 中文全文译文

8 · 多租户与安全(Multi-Tenancy and Security)

应用编排与外部知识接入 · 聚焦本章的模块关系、源码依据与实现要点。

项目Dify 章节8 状态全文译文 模块认证、权限与安全、工作流与编排、系统架构、接口与服务契约
源码线索
  • api/controllers/console/auth/data_source_oauth.py
  • api/controllers/console/auth/email_register.py
  • api/controllers/console/auth/error.py
  • api/controllers/console/auth/forgot_password.py
  • api/controllers/console/auth/login.py
  • api/controllers/console/auth/oauth.py
  • api/controllers/console/explore/installed_app.py
  • api/controllers/console/workspace/account.py
  • api/controllers/console/workspace/members.py
  • api/controllers/console/workspace/model_providers.py
模块标签
  • 认证、权限与安全
  • 工作流与编排
  • 系统架构
  • 接口与服务契约
  • 界面与交互

章节正文

多租户与安全

多租户与安全

相关源文件

本章引用的主要源码文件:

  • api/controllers/console/auth/data_source_oauth.py
  • api/controllers/console/auth/email_register.py
  • api/controllers/console/auth/error.py
  • api/controllers/console/auth/forgot_password.py
  • api/controllers/console/auth/login.py
  • api/controllers/console/auth/oauth.py
  • api/controllers/console/explore/installed_app.py
  • api/controllers/console/workspace/account.py
  • api/controllers/console/workspace/members.py
  • api/controllers/console/workspace/model_providers.py
  • api/controllers/console/workspace/models.py
  • api/controllers/console/workspace/plugin.py
  • api/controllers/console/workspace/workspace.py
  • api/libs/oauth.py
  • api/libs/oauth_data_source.py
  • api/models/account.py
  • api/models/api_based_extension.py
  • api/models/dataset.py
  • api/models/model.py
  • api/models/provider.py
  • api/models/source.py
  • api/models/task.py
  • api/models/tools.py
  • api/models/web.py
  • api/models/workflow.py
  • api/schedule/mail_clean_document_notify_task.py
  • api/services/account_service.py
  • api/templates/change_mail_confirm_old_template_zh-CN.html
  • api/templates/transfer_workspace_owner_confirm_template_en-US.html
  • api/templates/without-brand/transfer_workspace_owner_confirm_template_en-US.html
  • api/tests/unit_tests/libs/test_oauth_clients.py
  • api/tests/unit_tests/services/test_account_service.py
  • web/app/components/header/account-setting/members-page/__tests__/index.spec.tsx
  • web/app/components/header/account-setting/members-page/index.tsx
  • web/app/components/header/account-setting/members-page/operation/__tests__/index.spec.tsx
  • web/app/components/header/account-setting/members-page/operation/index.tsx

本文档介绍 Dify 的多租户架构、认证机制、基于角色的访问控制(RBAC)系统以及安全特性。内容涵盖系统如何在工作空间(租户)之间隔离数据、管理用户认证和授权,以及实施安全策略。

有关具体部署配置和环境变量的信息,请参阅部署与运维。有关 API 认证和请求流程的详细信息,请参阅服务 API

租户模型与工作空间隔离

Dify 通过 Tenant 模型实现严格的多租户架构,该模型代表一个工作空间。系统中的每个资源都通过 tenant_id 外键限定在某个租户范围内,从而确保工作空间之间的数据完全隔离。

租户实体结构
Dify · 租户实体结构 · 图 1
Dify · 租户实体结构 · 图 1

来源: api/models/account.py:19-25, api/models/account.py:87-116, api/models/model.py:32, api/models/dataset.py:178-179, api/models/workflow.py:187-188

数据隔离模式

隔离通过在数据库查询中始终包含 tenant_id 来强制执行。AccountService.load_user 函数确保用户登录时,其 current_tenant_id 根据 TenantAccountJoin 表正确设置,从而将所有后续请求限定到该特定工作空间。

来源: api/services/account_service.py:162-193, api/models/account.py:156-169

详细信息请参阅租户模型与资源隔离

认证架构

Dify 支持多种认证方式,包括邮箱/密码、OAuth(Google/GitHub)和邮箱验证码(Magic Link)。

认证流程与令牌管理
Dify · 认证流程与令牌管理 · 图 2
Dify · 认证流程与令牌管理 · 图 2

来源: api/services/account_service.py:104-107, api/services/account_service.py:150-154, api/controllers/console/auth/login.py:158-167

安全令牌
  • 访问令牌:用于 API 授权的短期 JWT,通过 set_access_token_to_cookie 设置在 Cookie 中。
  • 刷新令牌:存储在 Redis 中,前缀为 refresh_token:,用于签发新的访问令牌。
  • CSRF 令牌:通过 generate_csrf_token 生成并验证,以防止跨站请求伪造。

来源: api/services/account_service.py:110-112, api/services/account_service.py:150-154, api/controllers/console/auth/login.py:164-166

详细信息请参阅认证方式与流程

基于角色的访问控制(RBAC)

权限由 TenantAccountRole 枚举管理,该枚举定义了工作空间内的访问层级。

角色层级
角色枚举值关键权限
所有者owner完全控制权、所有权转让、工作空间删除。
管理员admin成员管理、模型提供商配置。
编辑者editor创建和编辑应用、工作流和数据集。
数据集操作员dataset_operator专门访问知识库管理。
普通成员normal基本访问权限,通常为只读或受限执行。

来源: api/models/account.py:19-24, api/models/account.py:39-76, web/app/components/header/account-setting/members-page/index.tsx:28-34

权限检查

系统使用 TenantAccountRole 中的工具方法(如 is_privileged_roleis_editing_role)在控制器和服务层检查权限。

来源: api/models/account.py:38-76, api/controllers/console/workspace/members.py:115-122

详细信息请参阅基于角色的访问控制

工作空间与成员管理

工作空间管理包括邀请成员、更新角色和转让所有权。

所有权转让流程

转让工作空间所有权是一个多步骤过程。它需要通过发送给当前所有者的验证码进行验证,并触发后台任务(如 send_owner_transfer_confirm_task)。

来源: api/services/account_service.py:74-78, api/controllers/console/workspace/members.py:48-60

成员邀请

管理员通过 RegisterService.invite_new_member 邀请新成员。这会生成一个邀请令牌,并触发 send_invite_member_mail_task

来源: api/services/account_service.py:73, api/controllers/console/workspace/members.py:142-148

详细信息请参阅工作空间与成员管理

账户生命周期管理

账户生命周期包括注册、激活、密码管理和删除。

生命周期事件
操作代码实体用途
注册RegisterService初始账户创建和邮箱验证。
激活AccountInitApi完成账户设置(时区/语言)。
密码重置AccountService通过 send_reset_password_mail_task 安全恢复。
删除delete_account_task通过 Celery 异步清理用户数据。

来源: api/services/account_service.py:66, api/services/account_service.py:79-83, api/controllers/console/workspace/account.py:250-252, api/controllers/console/auth/login.py:49

详细信息请参阅账户生命周期管理

计费与功能限制

在云版本中,对成员席位、应用数量和向量存储等资源的访问受 BillingServiceFeatureService 的限制。

功能检查

装饰器(如 cloud_edition_billing_resource_check)会拦截请求,以验证租户是否还有请求资源(例如"成员")的剩余配额。

来源: api/controllers/console/workspace/members.py:107, api/services/feature_service.py:54

安全工具

速率限制

Dify 使用基于 Redis 的 RateLimiter 来防止对登录和密码重置等敏感端点的暴力攻击。

来源: api/services/account_service.py:124-133, api/libs/helper.py:31

密码安全

密码在存储前使用 hash_password 进行哈希处理,并使用 compare_password 进行验证。请求中的敏感字段可以通过 decrypt_password_field 装饰器进行解密。

来源: api/services/account_service.py:34, api/controllers/console/auth/login.py:101, api/controllers/console/wraps.py:32