详细介绍了 Dify 的帐户和租户管理系统,该系统负责处理平台内的用户身份验证、工作区(租户)管理和用户权限。提供了全面的用户身份管理、多工作区支持以及基于角色的访问控制。
👆👆👆欢迎关注👆👆👆
接下来将分别介绍各个子系统:
模型提供者系统(Model Provider System)
RAG 知识系统(RAG Knowledge System)
对话系统(Conversation System)
工作流系统(Workflow System)
系统概述
帐户和租户管理系统是 Dify 的核心组件,用于管理:
- 用户帐户(User Accounts) ——注册、身份验证、配置文件管理
- 工作区(租户)
- 拥有自己的成员和资源的组织单位
- 成员资格和角色
- 工作区内基于角色的访问控制
- 身份验证流程
- 多种身份验证方法,包括密码、电子邮件代码和 OAuth
架构图
数据模型
该系统围绕以下主要实体构建:
帐户管理
帐户创建和注册
Dify 支持多种创建账户的路径:
- 标准注册
- 电子邮件/密码注册
- 基于 OAuth 的注册
- 通过 GitHub 或 Google 注册
- 基于邀请的注册
- 受邀加入工作区
- 初始设置
- 系统设置期间的第一个用户
帐户创建主要由 AccountService 和 RegisterService 类处理。create\_account 处理核心帐户创建逻辑,包括密码哈希和默认设置。
身份验证方法
Dify 支持多种身份验证方法:
- 基于密码的登录
- 传统的用户名/密码
- 电子邮件代码登录
- 一次性代码发送至电子邮件
- OAuth 提供商
- GitHub 和 Google 集成
- 基于令牌的身份验证
- 用于 API 访问的 JWT 令牌
身份验证由 AccountService 类管理,每种身份验证方法都有专门的方法:
密码验证:
account = AccountService.authenticate(email, password)
token\_pair = AccountService.login(account=account, ip\_address=ip\_address)
JWT 令牌管理:
access\_token = AccountService.get\_account\_jwt\_token(account)
refresh\_token = \_generate\_refresh\_token() AccountService.\_store\_refresh\_token(refresh\_token, account.id)
帐户安全功能
该系统实现了多项安全功能:
- 密码哈希
- 使用加盐密码哈希
- 速率限制 ——限制登录尝试和密码重置请求
- 基于 IP 的限制
- 限制通过 IP 发送电子邮件
- 令牌过期
- JWT 令牌在配置的时间后过期
- 刷新令牌轮换
- 刷新时使用新令牌以确保安全
