{"title":"认证与 Mind Key","slug":"authentication","category":"getting-started","summary":"Synapse 认证机制：Agent 用 Mind Key，人类用 JWT，只能用 URL 的工具用 ?key=。","audience":["human","llm"],"tags":["auth","mind-key","jwt","security"],"difficulty":"beginner","updated":"2026-06-27","word_count":274,"read_minutes":1,"llm_context":"Two auth methods: Mind Key (token-scoped, never expires) and JWT (user-scoped, 7-day expiry).\nMind Key: Authorization: Bearer mk_xxx OR ?key=mk_xxx (60 req/min limit on query)\nJWT: Authorization: Bearer eyJ... (no rate limit, used for /register, /login, /minds, /sharing)\nMind Key is shown only once at creation. Store it permanently.\nEach mind has exactly one Mind Key. Multiple minds = multiple keys.\n","lang":"zh","translated":true,"requested_lang":"zh","content_markdown":"\n# 认证与 Mind Key\n\nSynapse 使用两种认证方法，各自针对不同用例优化。理解它们的区别对构建可靠集成至关重要。\n\n## 两种认证方法\n\n| 方法 | 用例 | 限速 | 过期 |\n|--------|----------|------------|--------|\n| **Mind Key** | LLM Agent、自动化工具 | 无（header）/ 60 次/分钟（query） | 永不过期 |\n| **JWT** | 人类界面 UI、账户操作 | 无 | 7 天 |\n\n## Mind Key（用于 Agent）\n\nMind Key 是租户范围的 API 令牌。它对单个 Mind 的数据（记忆、任务、聊天、脚本等）进行认证。适用于：\n\n- 调用 API 的 LLM Agent\n- 后台自动化脚本\n- MCP Server 配置\n- 任何长期集成\n\n### 头部认证（推荐）\n\n```bash\ncurl -H \"Authorization: Bearer mk_yourMindKeyHere\" \\\n     https://synapse.schaefer.zone/memory/recall\n```\n\n### 查询参数（用于只能用 URL 的工具）\n\n```bash\ncurl https://synapse.schaefer.zone/memory/recall?key=mk_yourMindKeyHere\n```\n\n> [!WARNING]\n> `?key=` 查询参数被限速为**每分钟 60 次请求**。Bearer 头无限制。客户端支持自定义请求头时，请始终使用请求头。\n\n### 创建 Mind Key\n\n```bash\ncurl -X POST https://synapse.schaefer.zone/minds \\\n  -H \"Authorization: Bearer YOUR_JWT\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"name\": \"Work Mind\", \"description\": \"Project memories\"}'\n```\n\n响应包含 `mind_key` — **请立即保存**，它只显示一次。\n\n### 列出你的 Mind\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_JWT\" \\\n     https://synapse.schaefer.zone/minds\n```\n\n### 删除 Mind（不可逆！）\n\n```bash\ncurl -X DELETE -H \"Authorization: Bearer YOUR_JWT\" \\\n     https://synapse.schaefer.zone/minds/m_xyz789\n```\n\n## JWT（用于人类）\n\nJWT 对**用户账户**进行认证，而非特定 Mind。用于：\n\n- 账户注册与登录\n- 创建/列出/删除 Mind\n- 与其他用户共享 Mind\n- Web Push 订阅管理\n\n### 注册\n\n```bash\ncurl -X POST https://synapse.schaefer.zone/register \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"email\": \"you@example.com\", \"password\": \"secret\"}'\n```\n\n返回：`{ \"jwt\": \"eyJ...\", \"user\": {...} }`\n\n### 登录\n\n```bash\ncurl -X POST https://synapse.schaefer.zone/login \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"email\": \"you@example.com\", \"password\": \"secret\"}'\n```\n\n返回：`{ \"jwt\": \"eyJ...\", \"user\": {...} }`\n\n### JWT 过期\n\nJWT 在 **7 天**后过期。过期后再次调用 `/login` 即可获取新 JWT。Mind Key 永不过期，因此现有 Agent 集成可继续工作。\n\n## 安全最佳实践\n\n> [!CRITICAL]\n> - **绝不把 Mind Key 提交到 git。** 使用环境变量。\n> - **绝不在日志中记录 Mind Key。** 在日志中遮蔽（`mk_***...***xyz`）。\n> - **怀疑泄露时轮换 key**（删除 Mind、创建新 Mind）。\n> - **每个项目用一个 Mind**，以缩小 key 泄露的爆炸半径。\n\n### 环境变量模式\n\n```bash\n# .env（绝不提交此文件）\nSYNAPSE_MIND_KEY=mk_yourMindKeyHere\nSYNAPSE_URL=https://synapse.schaefer.zone\n```\n\n```typescript\n// Node.js\nconst mindKey = process.env.SYNAPSE_MIND_KEY;\nconst url = process.env.SYNAPSE_URL;\nawait fetch(`${url}/memory/recall`, {\n  headers: { Authorization: `Bearer ${mindKey}` },\n});\n```\n\n### MCP Server 配置\n\n```json\n{\n  \"mcpServers\": {\n    \"synapse\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"synapse-mcp-api@latest\"],\n      \"env\": {\n        \"SYNAPSE_MIND_KEY\": \"mk_yourMindKeyHere\",\n        \"SYNAPSE_URL\": \"https://synapse.schaefer.zone\"\n      }\n    }\n  }\n}\n```\n\n## 多 Mind 模式\n\n每个用户可有多个 Mind。常见模式：\n\n| Mind 名称 | 用途 |\n|-----------|---------|\n| `work` | 工作相关记忆 |\n| `personal` | 个人偏好、家庭 |\n| `project-synapse` | 特定项目上下文 |\n| `learning-german` | 学习进度 |\n| `assistant-default` | 通用回退 |\n\n在不同 LLM 会话中使用不同 Mind Key 即可隔离上下文。\n\n## 限速\n\n| 认证方式 | 限制 | 范围 |\n|-------------|-------|-------|\n| Mind Key（header） | 无 | 每个 Mind |\n| Mind Key（?key=） | 60 次/分钟 | 每个 IP |\n| JWT（header） | 无 | 每个用户 |\n| 公共端点 | 无 | 全局 |\n\n如适用，响应会包含限速头（`X-RateLimit-Limit`、`X-RateLimit-Remaining`、`Retry-After`）。\n\n## 下一步\n\n- [Mind Key 与 JWT](/docs/getting-started/mind-key-vs-jwt) — 何时用哪个\n- [Memory API](/docs/api/memory) — 用 Mind Key 能做什么\n- [User API](/docs/api/user) — 用 JWT 进行账户管理\n","content_html":"<h1>认证与 Mind Key</h1>\n<p>Synapse 使用两种认证方法，各自针对不同用例优化。理解它们的区别对构建可靠集成至关重要。</p>\n<h2>两种认证方法</h2>\n<table>\n<thead>\n<tr>\n<th>方法</th>\n<th>用例</th>\n<th>限速</th>\n<th>过期</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><strong>Mind Key</strong></td>\n<td>LLM Agent、自动化工具</td>\n<td>无（header）/ 60 次/分钟（query）</td>\n<td>永不过期</td>\n</tr>\n<tr>\n<td><strong>JWT</strong></td>\n<td>人类界面 UI、账户操作</td>\n<td>无</td>\n<td>7 天</td>\n</tr>\n</tbody></table>\n<h2>Mind Key（用于 Agent）</h2>\n<p>Mind Key 是租户范围的 API 令牌。它对单个 Mind 的数据（记忆、任务、聊天、脚本等）进行认证。适用于：</p>\n<ul>\n<li>调用 API 的 LLM Agent</li>\n<li>后台自动化脚本</li>\n<li>MCP Server 配置</li>\n<li>任何长期集成</li>\n</ul>\n<h3>头部认证（推荐）</h3>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer mk_yourMindKeyHere&quot;</span> \\\n     https://synapse.schaefer.zone/memory/recall</code></pre><h3>查询参数（用于只能用 URL 的工具）</h3>\n<pre><code class=\"hljs language-bash\">curl https://synapse.schaefer.zone/memory/recall?key=mk_yourMindKeyHere</code></pre><div class=\"callout callout-warn\">`?key=` 查询参数被限速为**每分钟 60 次请求**。Bearer 头无限制。客户端支持自定义请求头时，请始终使用请求头。</div><h3>创建 Mind Key</h3>\n<pre><code class=\"hljs language-bash\">curl -X POST https://synapse.schaefer.zone/minds \\\n  -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_JWT&quot;</span> \\\n  -H <span class=\"hljs-string\">&quot;Content-Type: application/json&quot;</span> \\\n  -d <span class=\"hljs-string\">&#x27;{&quot;name&quot;: &quot;Work Mind&quot;, &quot;description&quot;: &quot;Project memories&quot;}&#x27;</span></code></pre><p>响应包含 <code>mind_key</code> — <strong>请立即保存</strong>，它只显示一次。</p>\n<h3>列出你的 Mind</h3>\n<pre><code class=\"hljs language-bash\">curl -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_JWT&quot;</span> \\\n     https://synapse.schaefer.zone/minds</code></pre><h3>删除 Mind（不可逆！）</h3>\n<pre><code class=\"hljs language-bash\">curl -X DELETE -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_JWT&quot;</span> \\\n     https://synapse.schaefer.zone/minds/m_xyz789</code></pre><h2>JWT（用于人类）</h2>\n<p>JWT 对<strong>用户账户</strong>进行认证，而非特定 Mind。用于：</p>\n<ul>\n<li>账户注册与登录</li>\n<li>创建/列出/删除 Mind</li>\n<li>与其他用户共享 Mind</li>\n<li>Web Push 订阅管理</li>\n</ul>\n<h3>注册</h3>\n<pre><code class=\"hljs language-bash\">curl -X POST https://synapse.schaefer.zone/register \\\n  -H <span class=\"hljs-string\">&quot;Content-Type: application/json&quot;</span> \\\n  -d <span class=\"hljs-string\">&#x27;{&quot;email&quot;: &quot;you@example.com&quot;, &quot;password&quot;: &quot;secret&quot;}&#x27;</span></code></pre><p>返回：<code>{ &quot;jwt&quot;: &quot;eyJ...&quot;, &quot;user&quot;: {...} }</code></p>\n<h3>登录</h3>\n<pre><code class=\"hljs language-bash\">curl -X POST https://synapse.schaefer.zone/login \\\n  -H <span class=\"hljs-string\">&quot;Content-Type: application/json&quot;</span> \\\n  -d <span class=\"hljs-string\">&#x27;{&quot;email&quot;: &quot;you@example.com&quot;, &quot;password&quot;: &quot;secret&quot;}&#x27;</span></code></pre><p>返回：<code>{ &quot;jwt&quot;: &quot;eyJ...&quot;, &quot;user&quot;: {...} }</code></p>\n<h3>JWT 过期</h3>\n<p>JWT 在 <strong>7 天</strong>后过期。过期后再次调用 <code>/login</code> 即可获取新 JWT。Mind Key 永不过期，因此现有 Agent 集成可继续工作。</p>\n<h2>安全最佳实践</h2>\n<div class=\"callout callout-critical\"></div><h3>环境变量模式</h3>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># .env（绝不提交此文件）</span>\nSYNAPSE_MIND_KEY=mk_yourMindKeyHere\nSYNAPSE_URL=https://synapse.schaefer.zone</code></pre><pre><code class=\"hljs language-typescript\"><span class=\"hljs-comment\">// Node.js</span>\n<span class=\"hljs-keyword\">const</span> mindKey = process.<span class=\"hljs-property\">env</span>.<span class=\"hljs-property\">SYNAPSE_MIND_KEY</span>;\n<span class=\"hljs-keyword\">const</span> url = process.<span class=\"hljs-property\">env</span>.<span class=\"hljs-property\">SYNAPSE_URL</span>;\n<span class=\"hljs-keyword\">await</span> <span class=\"hljs-title function_\">fetch</span>(<span class=\"hljs-string\">`<span class=\"hljs-subst\">${url}</span>/memory/recall`</span>, {\n  <span class=\"hljs-attr\">headers</span>: { <span class=\"hljs-title class_\">Authorization</span>: <span class=\"hljs-string\">`Bearer <span class=\"hljs-subst\">${mindKey}</span>`</span> },\n});</code></pre><h3>MCP Server 配置</h3>\n<pre><code class=\"hljs language-json\"><span class=\"hljs-punctuation\">{</span>\n  <span class=\"hljs-attr\">&quot;mcpServers&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">{</span>\n    <span class=\"hljs-attr\">&quot;synapse&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">{</span>\n      <span class=\"hljs-attr\">&quot;command&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;npx&quot;</span><span class=\"hljs-punctuation\">,</span>\n      <span class=\"hljs-attr\">&quot;args&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">[</span><span class=\"hljs-string\">&quot;-y&quot;</span><span class=\"hljs-punctuation\">,</span> <span class=\"hljs-string\">&quot;synapse-mcp-api@latest&quot;</span><span class=\"hljs-punctuation\">]</span><span class=\"hljs-punctuation\">,</span>\n      <span class=\"hljs-attr\">&quot;env&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-punctuation\">{</span>\n        <span class=\"hljs-attr\">&quot;SYNAPSE_MIND_KEY&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;mk_yourMindKeyHere&quot;</span><span class=\"hljs-punctuation\">,</span>\n        <span class=\"hljs-attr\">&quot;SYNAPSE_URL&quot;</span><span class=\"hljs-punctuation\">:</span> <span class=\"hljs-string\">&quot;https://synapse.schaefer.zone&quot;</span>\n      <span class=\"hljs-punctuation\">}</span>\n    <span class=\"hljs-punctuation\">}</span>\n  <span class=\"hljs-punctuation\">}</span>\n<span class=\"hljs-punctuation\">}</span></code></pre><h2>多 Mind 模式</h2>\n<p>每个用户可有多个 Mind。常见模式：</p>\n<table>\n<thead>\n<tr>\n<th>Mind 名称</th>\n<th>用途</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><code>work</code></td>\n<td>工作相关记忆</td>\n</tr>\n<tr>\n<td><code>personal</code></td>\n<td>个人偏好、家庭</td>\n</tr>\n<tr>\n<td><code>project-synapse</code></td>\n<td>特定项目上下文</td>\n</tr>\n<tr>\n<td><code>learning-german</code></td>\n<td>学习进度</td>\n</tr>\n<tr>\n<td><code>assistant-default</code></td>\n<td>通用回退</td>\n</tr>\n</tbody></table>\n<p>在不同 LLM 会话中使用不同 Mind Key 即可隔离上下文。</p>\n<h2>限速</h2>\n<table>\n<thead>\n<tr>\n<th>认证方式</th>\n<th>限制</th>\n<th>范围</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Mind Key（header）</td>\n<td>无</td>\n<td>每个 Mind</td>\n</tr>\n<tr>\n<td>Mind Key（?key=）</td>\n<td>60 次/分钟</td>\n<td>每个 IP</td>\n</tr>\n<tr>\n<td>JWT（header）</td>\n<td>无</td>\n<td>每个用户</td>\n</tr>\n<tr>\n<td>公共端点</td>\n<td>无</td>\n<td>全局</td>\n</tr>\n</tbody></table>\n<p>如适用，响应会包含限速头（<code>X-RateLimit-Limit</code>、<code>X-RateLimit-Remaining</code>、<code>Retry-After</code>）。</p>\n<h2>下一步</h2>\n<ul>\n<li><a href=\"/docs/getting-started/mind-key-vs-jwt\">Mind Key 与 JWT</a> — 何时用哪个</li>\n<li><a href=\"/docs/api/memory\">Memory API</a> — 用 Mind Key 能做什么</li>\n<li><a href=\"/docs/api/user\">User API</a> — 用 JWT 进行账户管理</li>\n</ul>\n","urls":{"html":"/docs/getting-started/authentication","text":"/docs/getting-started/authentication?format=text","json":"/docs/getting-started/authentication?format=json","llm":"/docs/getting-started/authentication?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}