> 技术文档 > Supermemory认证与安全体系:Better Auth + 角色权限控制

Supermemory认证与安全体系:Better Auth + 角色权限控制


Supermemory认证与安全体系:Better Auth + 角色权限控制

【免费下载链接】supermemory Build your own second brain with supermemory. It\'s a ChatGPT for your bookmarks. Import tweets or save websites and content using the chrome extension. 【免费下载链接】supermemory 项目地址: https://gitcode.com/GitHub_Trending/su/supermemory

Supermemory项目构建了基于Better Auth框架的现代化认证与安全体系,采用分层架构设计支持多种认证方式(用户名密码、Magic Link、邮件OTP、API密钥等),提供完整的组织管理和会话控制机制。系统通过React Context实现全局认证状态管理,支持多租户组织架构和精细化的角色权限控制,确保数据安全隔离和可扩展性。

Better Auth认证系统架构

Supermemory项目采用了现代化的Better Auth认证框架,构建了一个高度模块化、可扩展且安全的企业级认证系统。该架构不仅支持多种认证方式,还提供了完整的组织管理和会话控制机制。

核心架构设计

Better Auth认证系统采用分层架构设计,通过清晰的职责分离确保系统的可维护性和扩展性:

mermaid

认证客户端配置

Supermemory的认证客户端采用高度可配置的设计,支持多种认证插件:

export const authClient = createAuthClient({ baseURL: process.env.NEXT_PUBLIC_BACKEND_URL ?? \"https://api.supermemory.ai\", fetchOptions: { credentials: \"include\", throw: true, }, plugins: [ usernameClient(), // 用户名密码认证 magicLinkClient(), // Magic Link认证 emailOTPClient(), // 邮件OTP认证 apiKeyClient(), // API密钥认证 adminClient(), // 管理员功能 organizationClient(), // 组织管理 anonymousClient(), // 匿名访问 ],})

认证上下文管理

系统通过React Context提供全局认证状态管理,确保在整个应用中可以方便地访问认证信息:

interface AuthContextType { session: SessionData[\"session\"] | null user: SessionData[\"user\"] | null org: Organization | null setActiveOrg: (orgSlug: string) => Promise}export function AuthProvider({ children }: { children: ReactNode }) { const { data: session } = useSession() const [org, setOrg] = useState(null) useEffect(() => { if (session?.session.activeOrganizationId) { authClient.organization.getFullOrganization().then((org) => { setOrg(org) }) } }, [session?.session.activeOrganizationId])}

中间件认证处理

在服务端中间件层面,系统实现了完整的会话验证机制:

export const middlewareAuthClient = createAuthClient({ baseURL: process.env.NEXT_PUBLIC_BACKEND_URL ?? \"https://api.supermemory.ai\", fetchOptions: { throw: true, }, plugins: [...]})

多租户组织架构

Better Auth系统支持完善的多租户组织管理,每个用户可以属于多个组织,并可以在不同组织间切换:

功能特性 实现方式 优势 组织切换 authClient.organization.setActive() 无缝切换,保持会话状态 组织信息获取 getFullOrganization() 获取完整的组织详情 权限隔离 基于组织的访问控制 数据安全隔离

会话管理机制

系统采用安全的Cookie-based会话管理,支持跨子域名的会话共享:

mermaid

认证插件体系

Better Auth的插件体系提供了极大的灵活性,每个插件都专注于特定的认证场景:

插件类型 使用场景 配置参数 usernameClient 传统用户名密码登录 支持自定义验证逻辑 magicLinkClient 无密码Magic Link登录 可配置链接有效期 emailOTPClient 邮件一次性密码 自定义邮件模板 apiKeyClient API密钥认证 密钥轮换策略 organizationClient 组织管理 多租户支持

错误处理与监控

系统集成了完善的错误处理机制,确保认证过程的可靠性:

// 统一的错误处理try { await authClient.signIn({ username, password })} catch (error) { // 处理认证错误 console.error(\'Authentication failed:\', error)}// 会话状态监控const { data: session, status } = useSession()

安全特性

Better Auth架构内置了多项安全保护机制:

  • CSRF保护: 自动的跨站请求伪造防护
  • 会话固定防护: 防止会话固定攻击
  • 速率限制: 认证尝试的频率控制
  • 安全头设置: 自动设置安全相关的HTTP头

扩展性设计

系统的模块化设计使得添加新的认证方式变得非常简单:

// 示例:添加社交媒体认证const socialAuthPlugin = () => ({ // 插件实现})// 在客户端配置中添加新插件plugins: [ ...existingPlugins, socialAuthPlugin(),]

这种架构设计确保了Supermemory认证系统既安全可靠,又具备良好的扩展性和维护性,为构建企业级应用提供了坚实的认证基础。

组织管理与多租户支持

Supermemory作为一个现代化的知识管理平台,采用了先进的多租户架构设计,为团队协作和企业级应用提供了强大的组织管理能力。该系统基于Better Auth认证框架构建,实现了精细化的权限控制和数据隔离机制。

多租户架构设计

Supermemory的多租户架构采用数据库级别的隔离策略,每个组织拥有独立的数据命名空间。核心设计理念体现在以下几个方面:

mermaid

组织隔离机制

系统通过orgId字段实现数据层面的逻辑隔离,所有核心数据实体都包含组织标识:

// 文档实体组织结构export const DocumentSchema = z.object({ id: z.string(), // 组织所有权标识 orgId: z.string(), userId: z.string(), connectionId: z.string().nullable().optional(), // 内容字段 title: z.string().nullable().optional(), content: z.string().nullable().optional(), type: DocumentTypeEnum.default(\"text\"), // 时间戳 createdAt: z.coerce.date(), updatedAt: z.coerce.date(),})
空间管理模型

Supermemory引入了空间(Space)概念,作为组织内部的知识容器,支持精细化的权限管理:

mermaid

权限控制系统

系统实现了基于角色的访问控制(RBAC),定义了四种核心角色权限:

角色 权限级别 操作权限 Owner 所有者 完全控制,包括删除空间、管理成员 Admin 管理员 管理内容、添加/移除成员(除所有者外) Editor 编辑者 创建、编辑内容,无法管理成员 Viewer 查看者 仅查看内容,无修改权限
权限验证实现

系统在API层面实现了细粒度的权限检查:

// 空间角色枚举定义export const SpaceRoleEnum = z.enum([\"owner\", \"admin\", \"editor\", \"viewer\"])export type SpaceRole = z.infer// 空间成员关联模型export const SpacesToMembersSchema = z.object({ spaceId: z.string(), userId: z.string(), role: SpaceRoleEnum, createdAt: z.coerce.date(),})

组织上下文管理

前端应用通过认证上下文维护组织状态,确保用户操作在正确的组织范围内:

// 认证上下文实现interface AuthContextType { session: SessionData[\"session\"] | null user: SessionData[\"user\"] | null org: Organization | null setActiveOrg: (orgSlug: string) => Promise}// 组织切换功能const setActiveOrg = async (slug: string) => { if (!slug) return const activeOrg = await authClient.organization.setActive({ organizationSlug: slug, }) setOrg(activeOrg)}

数据隔离策略

所有数据查询都自动包含组织过滤条件,确保数据安全性:

// API请求自动包含组织标识export const ApiRequestSchema = z.object({ id: z.string(), type: RequestTypeEnum, orgId: z.string(), // 自动注入的组织ID userId: z.string(), statusCode: z.number(), // 请求元数据 model: z.string().nullable().optional(), provider: z.string().nullable().optional(),})

团队协作特性

Supermemory支持多种团队协作场景:

  1. 项目空间共享:团队成员可以在特定空间内协作管理知识内容
  2. 权限委派:空间所有者可以分配不同权限级别的成员
  3. 内容版本控制:支持记忆条目的版本管理和变更追踪
  4. 审计日志:所有操作都记录详细的审计日志,便于追踪变更
协作工作流示例

mermaid

企业级扩展能力

Supermemory的多租户架构为企业部署提供了良好的扩展性:

  • 独立计费:每个组织拥有独立的订阅和用量统计
  • 自定义配置:支持组织级别的个性化设置
  • 批量管理:提供组织成员批量管理接口
  • 数据导出:支持组织数据的完整导出和迁移

这种架构设计使得Supermemory既能满足个人用户的知识管理需求,又能扩展支持大型团队的协作场景,体现了现代SaaS应用的最佳实践。

API密钥认证与外部访问控制

Supermemory提供了一套完整的API密钥认证体系,专门为外部应用和第三方服务设计,确保安全可靠的数据访问。这套系统基于现代化的认证协议和精细化的权限控制,为开发者提供了灵活而强大的集成能力。

API密钥认证机制

Supermemory的API密钥认证采用自定义的HTTP头部认证方式,通过x-supermemory-api-key头部传递认证信息。这种设计既保持了与标准Bearer token认证的兼容性,又提供了更好的可识别性和安全性。

// API密钥认证示例import { createSupermemoryInfiniteChat } from \"@supermemory/ai-sdk\"const apiKey = \"your_supermemory_api_key_here\"const chat = createSupermemoryInfiniteChat(apiKey, { providerApiKey: \"your_provider_api_key\", providerName: \"openai\"})// 所有请求都会自动包含认证头部// Headers: { \"x-supermemory-api-key\": apiKey }

多层级权限控制体系

Supermemory实现了精细化的权限控制,通过空间角色(Space Roles)和容器标签(Container Tags)两个维度来管理访问权限。

空间角色权限模型

系统定义了四种空间角色,每种角色拥有不同的操作权限:

角色 权限级别 主要操作权限 Owner 所有者 完全控制:创建、删除、修改空间,管理成员 Admin 管理员 高级管理:修改空间设置,管理内容,添加成员 Editor 编辑者 内容管理:添加、修改、删除记忆内容 Viewer 查看者 只读访问:查看内容,搜索记忆
// 空间角色枚举定义export const SpaceRoleEnum = z.enum([\"owner\", \"admin\", \"editor\", \"viewer\"])// 空间成员关联模式export const SpacesToMembersSchema = z.object({ spaceId: z.string(), userId: z.string(), role: SpaceRoleEnum.default(\"viewer\"), // 默认角色为查看者 metadata: MetadataSchema.nullable().optional(), createdAt: z.coerce.date(), updatedAt: z.coerce.date(),})
容器标签隔离机制

容器标签(Container Tags)提供了另一种维度的访问控制,允许按项目、用户或任意逻辑分组来隔离数据:

// 使用容器标签进行数据隔离const containerTags = [\"user_123\", \"project_456\"]// 搜索特定容器内的记忆const response = await client.search.execute({ q: \"machine learning\", containerTags, // 仅搜索指定容器的内容 limit: 10, chunkThreshold: 0.6})

外部访问控制流程

Supermemory的外部访问控制遵循严格的认证和授权流程,确保每次API请求都经过完整的权限验证:

mermaid

API请求审计与监控

所有通过API密钥发起的请求都会受到完整的审计跟踪,系统记录详细的请求信息用于安全分析和使用统计:

// API请求审计记录模式export const ApiRequestSchema = z.object({ id: z.string(), type: RequestTypeEnum, // 请求类型:add, search, update, delete等 orgId: z.string(), userId: z.string(), keyId: z.string().nullable().optional(), // API密钥ID statusCode: z.number(), duration: z.number().nullable().optional(), // 令牌使用跟踪 originalTokens: z.number().nullable().optional(), finalTokens: z.number().nullable().optional(), tokensSaved: z.number().nullable().optional(), // 元数据信息 metadata: MetadataSchema.nullable().optional(), origin: z.string().default(\"api\"), // 请求来源标识 createdAt: z.coerce.date(),})

安全最佳实践

Supermemory在API密钥管理方面遵循行业最佳实践:

  1. 密钥轮换机制:支持定期自动或手动轮换API密钥
  2. 权限最小化原则:每个API密钥只授予完成特定任务所需的最小权限
  3. 请求频率限制:基于密钥实施请求频率限制,防止滥用
  4. 详细的审计日志:记录所有API操作便于安全审计和故障排查
  5. 多因素验证:支持为敏感操作启用多因素验证

集成示例

以下是一个完整的API集成示例,展示了如何使用Supermemory API密钥进行记忆搜索和添加操作:

import { supermemoryTools } from \"@supermemory/ai-sdk\"// 初始化工具const tools = supermemoryTools(process.env.SUPERMEMORY_API_KEY, { containerTags: [\"project_123\", \"user_456\"]})// 搜索记忆const searchResults = await tools.searchMemories({ informationToGet: \"机器学习最新进展\"})// 添加新记忆const addResult = await tools.addMemory({ memory: \"深度学习在自然语言处理领域取得了突破性进展\"})// 获取特定记忆详情const memoryDetails = await tools.fetchMemory({ memoryId: \"mem_abc123def456\"})

这套API密钥认证与外部访问控制系统为Supermemory提供了企业级的安全保障,同时保持了开发者友好的集成体验。通过精细化的权限控制和完整的审计跟踪,确保了数据的安全性和合规性。

安全最佳实践与数据保护

在Supermemory的认证与安全体系中,数据保护是核心关注点之一。作为一个处理用户敏感记忆和文档的第二大脑平台,Supermemory采用了多层次的安全策略来确保用户数据的安全性和隐私性。

数据加密与安全存储

Supermemory在数据存储层面实施了严格的加密策略。所有敏感数据在传输和存储过程中都经过加密处理:

// 数据加密配置示例export const EncryptionConfig = { algorithm: \'aes-256-gcm\', keyLength: 32, ivLength: 12, authTagLength: 16};// 敏感字段加密处理const encryptSensitiveData = (data: string, key: Buffer): string => { const iv = crypto.randomBytes(EncryptionConfig.ivLength); const cipher = crypto.createCipheriv( EncryptionConfig.algorithm, key, iv ); let encrypted = cipher.update(data, \'utf8\', \'hex\'); encrypted += cipher.final(\'hex\'); const authTag = cipher.getAuthTag(); return `${iv.toString(\'hex\')}:${encrypted}:${authTag.toString(\'hex\')}`;};

访问控制与权限验证

基于Zod schema验证的权限控制系统确保只有授权用户能够访问特定数据:

mermaid

权限验证流程包含以下关键检查点:

  1. 用户身份验证 - 通过Better Auth验证用户会话
  2. 组织权限验证 - 检查用户是否属于目标组织
  3. 空间角色验证 - 验证用户在特定空间的角色权限
  4. 操作权限验证 - 确认用户是否有权执行当前操作

安全审计与监控

Supermemory实现了全面的安全审计机制,所有关键操作都被记录和监控:

// 审计日志记录export const logSecurityEvent = (event: SecurityEvent) => { const auditLog: AuditLog = { eventType: event.type, userId: event.userId, orgId: event.orgId, timestamp: new Date(), ipAddress: event.ipAddress, userAgent: event.userAgent, resourceId: event.resourceId, action: event.action, status: event.status, metadata: event.metadata }; // 写入安全审计数据库 securityAuditDB.insert(auditLog); // 实时安全监控 if (isSuspiciousActivity(event)) { triggerSecurityAlert(event); }};

数据隔离与多租户架构

采用严格的数据隔离策略,确保不同用户和组织的数据完全隔离:

隔离层级 实现机制 安全保证 组织级别 数据库分区 组织间数据完全隔离 用户级别 访问控制 用户只能访问授权数据 空间级别 角色权限 空间内细粒度权限控制 连接级别 OAuth范围 第三方连接权限限制

安全配置最佳实践

Supermemory推荐以下安全配置最佳实践:

  1. HTTPS强制启用 - 所有通信必须使用加密传输
  2. CORS严格配置 - 限制跨域请求来源
  3. 内容安全策略 - 防止XSS攻击
  4. 安全头部设置 - 包括X-Frame-Options、X-Content-Type-Options等
  5. 会话安全管理 - 安全的Cookie设置和会话过期策略
// 安全中间件配置export const securityMiddleware = (req: Request, res: Response, next: NextFunction) => { // 设置安全头部 res.setHeader(\'X-Frame-Options\', \'DENY\'); res.setHeader(\'X-Content-Type-Options\', \'nosniff\'); res.setHeader(\'X-XSS-Protection\', \'1; mode=block\'); res.setHeader(\'Strict-Transport-Security\', \'max-age=31536000; includeSubDomains\'); // CSP策略 res.setHeader(\'Content-Security-Policy\', \"default-src \'self\'; \" + \"script-src \'self\' \'unsafe-inline\'; \" + \"style-src \'self\' \'unsafe-inline\'; \" + \"img-src \'self\' data: https:;\" ); next();};

漏洞管理与应急响应

建立完善的漏洞管理流程和安全应急响应机制:

  1. 定期安全扫描 - 自动化安全漏洞检测
  2. 依赖项安全审计 - 监控第三方库的安全状况
  3. 安全补丁管理 - 及时应用安全更新
  4. 应急响应计划 - 明确安全事件处理流程
  5. 安全培训 - 团队成员安全意识培养

通过上述多层次的安全保护措施,Supermemory确保了用户数据在整个生命周期中的安全性,从数据采集、存储、处理到访问的每个环节都实施了严格的安全控制。

安全最佳实践总结

Supermemory通过多层次安全策略构建了完整的数据保护体系,包括数据加密存储、严格的访问控制与权限验证、全面的安全审计监控、以及数据隔离与多租户架构。系统实施HTTPS强制加密、CORS严格配置、内容安全策略等最佳实践,并建立了完善的漏洞管理与应急响应机制,确保用户数据在整个生命周期中的安全性和隐私保护。

【免费下载链接】supermemory Build your own second brain with supermemory. It\'s a ChatGPT for your bookmarks. Import tweets or save websites and content using the chrome extension. 【免费下载链接】supermemory 项目地址: https://gitcode.com/GitHub_Trending/su/supermemory

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

免费论坛社区