从零开始学 Dify- 帐户与租户管理系统设计揭秘

详细介绍了 Dify 的帐户和租户管理系统,该系统负责处理平台内的用户身份验证、工作区(租户)管理和用户权限。提供了全面的用户身份管理、多工作区支持以及基于角色的访问控制。

👆👆👆欢迎关注👆👆👆

接下来将分别介绍各个子系统:

模型提供者系统(Model Provider System)

RAG 知识系统(RAG Knowledge System)

对话系统(Conversation System)

工作流系统(Workflow System)

系统概述

帐户和租户管理系统是 Dify 的核心组件,用于管理:

  1. 用户帐户(User Accounts) ——注册、身份验证、配置文件管理
  2. 工作区(租户)
  • 拥有自己的成员和资源的组织单位
  1. 成员资格和角色
  • 工作区内基于角色的访问控制
  1. 身份验证流程
  • 多种身份验证方法,包括密码、电子邮件代码和 OAuth

架构图

picture.image

数据模型

该系统围绕以下主要实体构建:

picture.image

帐户管理

帐户创建和注册

Dify 支持多种创建账户的路径:

  1. 标准注册
  • 电子邮件/密码注册
  1. 基于 OAuth 的注册
  • 通过 GitHub 或 Google 注册
  1. 基于邀请的注册
  • 受邀加入工作区
  1. 初始设置
  • 系统设置期间的第一个用户

帐户创建主要由 AccountServiceRegisterService 类处理。create\_account 处理核心帐户创建逻辑,包括密码哈希和默认设置。

picture.image

身份验证方法

Dify 支持多种身份验证方法:

  1. 基于密码的登录
  • 传统的用户名/密码
  1. 电子邮件代码登录
  • 一次性代码发送至电子邮件
  1. OAuth 提供商
  • GitHub 和 Google 集成
  1. 基于令牌的身份验证
  • 用于 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)  

帐户安全功能

该系统实现了多项安全功能:

  1. 密码哈希
  • 使用加盐密码哈希
  1. 速率限制 ——限制登录尝试和密码重置请求
  2. 基于 IP 的限制
  • 限制通过 IP 发送电子邮件
  1. 令牌过期
  • JWT 令牌在配置的时间后过期
  1. 刷新令牌轮换
  • 刷新时使用新令牌以确保安全

picture.image

0
0
0
0
评论
未登录
暂无评论