服务端认证与安全(中文译文)
原始 DeepWiki 页面:https://deepwiki.com/mem0ai/mem0/12.2-server-authentication-and-security
翻译时间:2026-05-27T08:45:04.160Z
翻译模型:deepseek-chat
原文字符数:8710
项目:Mem0 (mem0)
---
服务器认证与安全
相关源文件
以下文件被用作生成此 Wiki 页面的上下文:
docs/open-source/features/rest-api.mdxexamples/graph-db-demo/alice-memories.pngexamples/graph-db-demo/memgraph-example.ipynbserver/.env.exampleserver/Dockerfileserver/Makefileserver/README.mdserver/dev.Dockerfileserver/docker-compose.yamlserver/main.pyserver/requirements.txttests/test_server_auth.pytests/test_server_params.py
Mem0 自托管服务器采用"默认安全"的设计理念。它实现了一个多层认证系统,支持通过 JWT 进行交互式仪表盘会话、通过每个用户的 API 密钥进行程序化访问,以及一个遗留的管理员覆盖机制。
认证概述
服务器的认证逻辑集中在 auth.py 中,并通过 server/main.py 中的 FastAPI 依赖项强制执行。系统按特定优先级顺序评估凭证:
- AUTH_DISABLED 标志:如果设置为
true,则绕过所有安全检查(仅限本地开发)server/main.py:89-90。 - Bearer JWT:用于 Mem0 仪表盘上的交互式会话
docs/open-source/features/rest-api.mdx:133-133。 - X-API-Key(每个用户):用于程序化 SDK/API 访问,作用域限定为特定仪表盘用户
docs/open-source/features/rest-api.mdx:134-134。 - X-API-Key(遗留管理员):使用
ADMIN_API_KEY环境变量的全局覆盖机制docs/open-source/features/rest-api.mdx:135-135。
安全状态流
下图说明了请求如何通过 verify_auth 依赖项进行验证。
请求认证流程
graph TD
Request["传入请求"] --> AuthCheck{"AUTH_DISABLED == true?"}
AuthCheck -- "是" --> Process["处理请求"]
AuthCheck -- "否" --> HeaderCheck{"Authorization 或 X-API-Key?"}
HeaderCheck -- "Authorization: Bearer <JWT>" --> JWTVal["verify_token()"]
JWTVal -- "有效" --> Process
JWTVal -- "无效/已过期" --> 401["401 未授权"]
HeaderCheck -- "X-API-Key: m0sk_..." --> KeyLookup["在数据库中检查 API 密钥"]
KeyLookup -- "找到且活跃" --> Process
KeyLookup -- "未找到" --> AdminKeyCheck{"匹配 ADMIN_API_KEY?"}
AdminKeyCheck -- "是" --> Process
AdminKeyCheck -- "否" --> 401
HeaderCheck -- "无" --> 401
来源:server/main.py:139-146, server/main.py:89-98, docs/open-source/features/rest-api.mdx:127-138
---
基于 JWT 的仪表盘认证
交互式认证通过 server/routers/auth.py 中的 auth_router 进行管理 server/main.py:29。该系统为内置仪表盘提供安全的登录、注册和令牌刷新功能。
关键组件
- JWT_SECRET:一个必需的环境变量,用于签署令牌。如果启用认证时缺少此变量,服务器将无法启动
server/main.py:83-87。 - 访问令牌:短生命周期的令牌,用于认证对受保护路由的请求
docs/open-source/features/rest-api.mdx:133-133。 - 刷新令牌:长生命周期的令牌,用于获取新的访问令牌,而无需重新输入凭证
docs/open-source/features/rest-api.mdx:169-169。
实现细节
服务器使用 passlib 配合 bcrypt 进行密码哈希处理,并使用 python-jose 进行 JWT 操作 server/requirements.txt:17-19。
| 端点 | 函数 | 作用 |
|---|---|---|
POST /auth/register | register() | 创建初始管理员用户。如果用户已存在,则返回 403 docs/open-source/features/rest-api.mdx:145-149。 |
POST /auth/login | login() | 验证凭证并返回一对 JWT docs/open-source/features/rest-api.mdx:151-155。 |
POST /auth/refresh | refresh() | 用有效的刷新令牌换取新的访问令牌 docs/open-source/features/rest-api.mdx:169-169。 |
来源:server/main.py:29, server/requirements.txt:17-19, docs/open-source/features/rest-api.mdx:131-134
---
API 密钥管理
对于程序化访问,服务器支持 X-API-Key 请求头。这些密钥通过 api_keys_router 进行管理 server/main.py:30。
每个用户的 API 密钥
用户可以通过仪表盘生成多个 API 密钥。这些密钥具有以下特性:
- 作用域限定:继承创建用户的权限和作用域
docs/open-source/features/rest-api.mdx:185-186。 - 安全:仅在创建时显示一次
docs/open-source/features/rest-api.mdx:173-174。 - 可撤销:可以通过
DELETE /api-keys/{id}端点删除,以立即终止访问docs/open-source/features/rest-api.mdx:185-185。
遗留管理员 API 密钥
ADMIN_API_KEY 环境变量充当"超级密钥"。它旨在与较旧的 Mem0 部署保持向后兼容,并且不需要数据库中的用户记录。
- 验证:如果
X-API-Key请求头与ADMIN_API_KEY环境变量匹配,则该请求被授权为管理操作docs/open-source/features/rest-api.mdx:187-194。 - 安全警告:如果密钥长度少于 16 个字符,服务器会在启动时记录一条警告
server/main.py:41,server/main.py:91-95。
来源:server/main.py:30, server/main.py:41-41, docs/open-source/features/rest-api.mdx:171-186
---
安全配置与请求头
AUTH_DISABLED 标志
对于本地开发,在 .env 文件中设置 AUTH_DISABLED=true 会绕过所有安全检查 server/.env.example:17。
- 行为:
verify_auth依赖项被绕过,服务器会记录一条警告server/main.py:89-90。 - 生产环境警告:绝不应在生产环境中使用此标志,因为它会将所有内存操作(CRUD)暴露给公共网络
docs/open-source/features/rest-api.mdx:195-197。
安全请求头
Mem0 仪表盘强制执行多个安全请求头,以防止常见的 Web 攻击:
X-Frame-Options: DENY:通过禁止仪表盘嵌入 iframe 来防止点击劫持server/README.md:117-117。Content-Security-Policy: frame-ancestors 'none':X-Frame-Options的现代替代方案server/README.md:118-118。X-Content-Type-Options: nosniff:防止浏览器"嗅探"响应的 MIME 类型server/README.md:119-119。Referrer-Policy: strict-origin-when-cross-origin:限制随请求发送的引用者信息量server/README.md:120-120。
CORS 配置
服务器将跨域请求限制为环境变量中定义的 DASHBOARD_URL server/main.py:153-160。
来源:server/main.py:89-90, server/README.md:113-122, server/.env.example:17-17, server/main.py:153-160
---
数据流:安全上下文关联
此图映射了认证实体与核心内存处理逻辑之间的关系。
认证实体映射
graph LR
subgraph "请求层"
H_JWT["请求头: Authorization"]
H_KEY["请求头: X-API-Key"]
end
subgraph "代码实体 (server/main.py)"
V_AUTH["verify_auth()"]
M_CONFIG["get_current_config()"]
end
subgraph "数据存储"
U_DB[("用户表 (models.py)")]
K_DB[("APIKey 表 (models.py)")]
M_DB[("向量存储/PGVector")]
end
H_JWT --> V_AUTH
H_KEY --> V_AUTH
V_AUTH --> U_DB
V_AUTH --> K_DB
V_AUTH -- "注入上下文" --> M_CONFIG
M_CONFIG -- "按 user_id/agent_id 过滤" --> M_DB
来源:server/main.py:16-34, server/models.py:27-27, server/server_state.py:34-34
安全环境变量总结
| 变量 | 默认值 | 用途 |
|---|---|---|
JWT_SECRET | 无 | 用于签署 JWT 令牌的密钥。认证必需 server/main.py:83。 |
ADMIN_API_KEY | 无 | 用于遗留支持的全局管理 API 密钥 server/main.py:91。 |
AUTH_DISABLED | false | 绕过所有认证,用于本地开发 server/.env.example:17。 |
DASHBOARD_URL | http://localhost:3000 | 用于 CORS 配置,以允许仪表盘访问 server/main.py:153-160。 |
来源:server/main.py:83-160, server/.env.example:14-18