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. 项目地址: https://gitcode.com/GitHub_Trending/su/supermemory
Supermemory项目构建了基于Better Auth框架的现代化认证与安全体系,采用分层架构设计支持多种认证方式(用户名密码、Magic Link、邮件OTP、API密钥等),提供完整的组织管理和会话控制机制。系统通过React Context实现全局认证状态管理,支持多租户组织架构和精细化的角色权限控制,确保数据安全隔离和可扩展性。
Better Auth认证系统架构
Supermemory项目采用了现代化的Better Auth认证框架,构建了一个高度模块化、可扩展且安全的企业级认证系统。该架构不仅支持多种认证方式,还提供了完整的组织管理和会话控制机制。
核心架构设计
Better Auth认证系统采用分层架构设计,通过清晰的职责分离确保系统的可维护性和扩展性:
认证客户端配置
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会话管理,支持跨子域名的会话共享:
认证插件体系
Better Auth的插件体系提供了极大的灵活性,每个插件都专注于特定的认证场景:
错误处理与监控
系统集成了完善的错误处理机制,确保认证过程的可靠性:
// 统一的错误处理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的多租户架构采用数据库级别的隔离策略,每个组织拥有独立的数据命名空间。核心设计理念体现在以下几个方面:
组织隔离机制
系统通过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)概念,作为组织内部的知识容器,支持精细化的权限管理:
权限控制系统
系统实现了基于角色的访问控制(RBAC),定义了四种核心角色权限:
权限验证实现
系统在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支持多种团队协作场景:
- 项目空间共享:团队成员可以在特定空间内协作管理知识内容
- 权限委派:空间所有者可以分配不同权限级别的成员
- 内容版本控制:支持记忆条目的版本管理和变更追踪
- 审计日志:所有操作都记录详细的审计日志,便于追踪变更
协作工作流示例
企业级扩展能力
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)两个维度来管理访问权限。
空间角色权限模型
系统定义了四种空间角色,每种角色拥有不同的操作权限:
// 空间角色枚举定义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请求都经过完整的权限验证:
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密钥管理方面遵循行业最佳实践:
- 密钥轮换机制:支持定期自动或手动轮换API密钥
- 权限最小化原则:每个API密钥只授予完成特定任务所需的最小权限
- 请求频率限制:基于密钥实施请求频率限制,防止滥用
- 详细的审计日志:记录所有API操作便于安全审计和故障排查
- 多因素验证:支持为敏感操作启用多因素验证
集成示例
以下是一个完整的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验证的权限控制系统确保只有授权用户能够访问特定数据:
权限验证流程包含以下关键检查点:
- 用户身份验证 - 通过Better Auth验证用户会话
- 组织权限验证 - 检查用户是否属于目标组织
- 空间角色验证 - 验证用户在特定空间的角色权限
- 操作权限验证 - 确认用户是否有权执行当前操作
安全审计与监控
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); }};
数据隔离与多租户架构
采用严格的数据隔离策略,确保不同用户和组织的数据完全隔离:
安全配置最佳实践
Supermemory推荐以下安全配置最佳实践:
- HTTPS强制启用 - 所有通信必须使用加密传输
- CORS严格配置 - 限制跨域请求来源
- 内容安全策略 - 防止XSS攻击
- 安全头部设置 - 包括X-Frame-Options、X-Content-Type-Options等
- 会话安全管理 - 安全的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();};
漏洞管理与应急响应
建立完善的漏洞管理流程和安全应急响应机制:
- 定期安全扫描 - 自动化安全漏洞检测
- 依赖项安全审计 - 监控第三方库的安全状况
- 安全补丁管理 - 及时应用安全更新
- 应急响应计划 - 明确安全事件处理流程
- 安全培训 - 团队成员安全意识培养
通过上述多层次的安全保护措施,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. 项目地址: https://gitcode.com/GitHub_Trending/su/supermemory
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考