{"title":"Xác thực & Mind Key","slug":"authentication","category":"getting-started","summary":"Cách xác thực Synapse hoạt động: Mind Key cho agent, JWT cho con người, ?key= cho công cụ chỉ dùng URL.","audience":["human","llm"],"tags":["auth","mind-key","jwt","security"],"difficulty":"beginner","updated":"2026-06-27","word_count":638,"read_minutes":3,"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":"vi","translated":true,"requested_lang":"vi","content_markdown":"\n# Xác thực & Mind Key\n\nSynapse sử dụng hai phương thức xác thực, mỗi phương thức được tối ưu cho một\ntrường hợp sử dụng khác nhau. Hiểu sự khác biệt là điều thiết yếu để xây dựng\ntích hợp đáng tin cậy.\n\n## Hai phương thức xác thực\n\n| Phương thức | Trường hợp | Giới hạn tốc độ | Hết hạn |\n|--------|----------|------------|--------|\n| **Mind Key** | LLM agent, công cụ tự động | Không (header) / 60 phút (query) | Không bao giờ |\n| **JWT** | Giao diện hướng con người, thao tác tài khoản | Không | 7 ngày |\n\n## Mind Key (cho Agent)\n\nMind Key là token API phạm vi tenant. Nó xác thực dữ liệu của một mind duy nhất\n(bộ nhớ, tác vụ, chat, script, v.v.). Sử dụng nó cho:\n\n- LLM agent gọi API\n- Script tự động hóa nền\n- Cấu hình MCP server\n- Bất kỳ tích hợp tồn tại lâu dài nào\n\n### Xác thực header (khuyến nghị)\n\n```bash\ncurl -H \"Authorization: Bearer mk_yourMindKeyHere\" \\\n     https://synapse.schaefer.zone/memory/recall\n```\n\n### Tham số query (cho công cụ chỉ dùng URL)\n\n```bash\ncurl https://synapse.schaefer.zone/memory/recall?key=mk_yourMindKeyHere\n```\n\n> [!WARNING]\n> Tham số query `?key=` bị giới hạn tốc độ **60 yêu cầu mỗi phút**. Header\n> Bearer không có giới hạn tốc độ. Sử dụng header bất cứ khi nào client của bạn\n> hỗ trợ header tùy chỉnh.\n\n### Tạo 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\nPhản hồi bao gồm `mind_key` — **lưu ngay lập tức**, nó chỉ hiển thị một lần.\n\n### Liệt kê mind của bạn\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_JWT\" \\\n     https://synapse.schaefer.zone/minds\n```\n\n### Xóa mind (không thể đảo ngược!)\n\n```bash\ncurl -X DELETE -H \"Authorization: Bearer YOUR_JWT\" \\\n     https://synapse.schaefer.zone/minds/m_xyz789\n```\n\n## JWT (cho Con người)\n\nJWT xác thực **tài khoản người dùng**, không phải một mind cụ thể. Sử dụng cho:\n\n- Đăng ký và đăng nhập tài khoản\n- Tạo / liệt kê / xóa mind\n- Chia sẻ mind với người dùng khác\n- Quản lý đăng ký Web Push\n\n### Đăng ký\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\nTrả về: `{ \"jwt\": \"eyJ...\", \"user\": {...} }`\n\n### Đăng nhập\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\nTrả về: `{ \"jwt\": \"eyJ...\", \"user\": {...} }`\n\n### Hết hạn JWT\n\nJWT hết hạn sau **7 ngày**. Khi JWT hết hạn, chỉ cần gọi lại `/login` để lấy\nJWT mới. Mind Key không bao giờ hết hạn, do đó các tích hợp agent hiện tại tiếp\ntục hoạt động.\n\n## Thực hành bảo mật tốt nhất\n\n> [!CRITICAL]\n> - **Không bao giờ commit Mind Key vào git.** Sử dụng biến môi trường.\n> - **Không bao giờ ghi nhật ký Mind Key.** Che chúng trong nhật ký (`mk_***...***xyz`).\n> - **Xoay vòng key** nếu bạn nghi ngờ lộ lọt (xóa mind, tạo mới).\n> - **Sử dụng một mind mỗi dự án** để giới hạn thiệt hại nếu key bị lộ.\n\n### Mẫu biến môi trường\n\n```bash\n# .env (NEVER commit this file)\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### Cấu hình 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## Mẫu Multi-Mind\n\nMỗi người dùng có thể có nhiều mind. Mẫu phổ biến:\n\n| Tên Mind | Mục đích |\n|-----------|---------|\n| `work` | Bộ nhớ liên quan công việc |\n| `personal` | Sở thích cá nhân, gia đình |\n| `project-synapse` | Ngữ cảnh dự án cụ thể |\n| `learning-german` | Tiến độ học tập |\n| `assistant-default` | Fallback mục đích chung |\n\nSử dụng các Mind Key khác nhau cho các phiên LLM khác nhau để giữ ngữ cảnh tách\nbiệt.\n\n## Giới hạn tốc độ\n\n| Phương thức xác thực | Giới hạn | Phạm vi |\n|-------------|-------|-------|\n| Mind Key (header) | Không | Mỗi mind |\n| Mind Key (?key=) | 60/phút | Mỗi IP |\n| JWT (header) | Không | Mỗi người dùng |\n| Endpoint công khai | Không | Toàn cầu |\n\nHeader giới hạn tốc độ (`X-RateLimit-Limit`, `X-RateLimit-Remaining`,\n`Retry-After`) được bao gồm trong phản hồi khi áp dụng.\n\n## Bước tiếp theo\n\n- [Mind Key vs JWT](/docs/getting-started/mind-key-vs-jwt) — khi nào dùng cái nào\n- [Memory API](/docs/api/memory) — những gì bạn có thể làm với Mind Key\n- [User API](/docs/api/user) — quản lý tài khoản với JWT\n","content_html":"<h1>Xác thực &amp; Mind Key</h1>\n<p>Synapse sử dụng hai phương thức xác thực, mỗi phương thức được tối ưu cho một\ntrường hợp sử dụng khác nhau. Hiểu sự khác biệt là điều thiết yếu để xây dựng\ntích hợp đáng tin cậy.</p>\n<h2>Hai phương thức xác thực</h2>\n<table>\n<thead>\n<tr>\n<th>Phương thức</th>\n<th>Trường hợp</th>\n<th>Giới hạn tốc độ</th>\n<th>Hết hạn</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><strong>Mind Key</strong></td>\n<td>LLM agent, công cụ tự động</td>\n<td>Không (header) / 60 phút (query)</td>\n<td>Không bao giờ</td>\n</tr>\n<tr>\n<td><strong>JWT</strong></td>\n<td>Giao diện hướng con người, thao tác tài khoản</td>\n<td>Không</td>\n<td>7 ngày</td>\n</tr>\n</tbody></table>\n<h2>Mind Key (cho Agent)</h2>\n<p>Mind Key là token API phạm vi tenant. Nó xác thực dữ liệu của một mind duy nhất\n(bộ nhớ, tác vụ, chat, script, v.v.). Sử dụng nó cho:</p>\n<ul>\n<li>LLM agent gọi API</li>\n<li>Script tự động hóa nền</li>\n<li>Cấu hình MCP server</li>\n<li>Bất kỳ tích hợp tồn tại lâu dài nào</li>\n</ul>\n<h3>Xác thực header (khuyến nghị)</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>Tham số query (cho công cụ chỉ dùng 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\">Tham số query `?key=` bị giới hạn tốc độ **60 yêu cầu mỗi phút**. Header\nBearer không có giới hạn tốc độ. Sử dụng header bất cứ khi nào client của bạn\nhỗ trợ header tùy chỉnh.</div><h3>Tạo 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>Phản hồi bao gồm <code>mind_key</code> — <strong>lưu ngay lập tức</strong>, nó chỉ hiển thị một lần.</p>\n<h3>Liệt kê mind của bạn</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>Xóa mind (không thể đảo ngược!)</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 (cho Con người)</h2>\n<p>JWT xác thực <strong>tài khoản người dùng</strong>, không phải một mind cụ thể. Sử dụng cho:</p>\n<ul>\n<li>Đăng ký và đăng nhập tài khoản</li>\n<li>Tạo / liệt kê / xóa mind</li>\n<li>Chia sẻ mind với người dùng khác</li>\n<li>Quản lý đăng ký Web Push</li>\n</ul>\n<h3>Đăng ký</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>Trả về: <code>{ &quot;jwt&quot;: &quot;eyJ...&quot;, &quot;user&quot;: {...} }</code></p>\n<h3>Đăng nhập</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>Trả về: <code>{ &quot;jwt&quot;: &quot;eyJ...&quot;, &quot;user&quot;: {...} }</code></p>\n<h3>Hết hạn JWT</h3>\n<p>JWT hết hạn sau <strong>7 ngày</strong>. Khi JWT hết hạn, chỉ cần gọi lại <code>/login</code> để lấy\nJWT mới. Mind Key không bao giờ hết hạn, do đó các tích hợp agent hiện tại tiếp\ntục hoạt động.</p>\n<h2>Thực hành bảo mật tốt nhất</h2>\n<div class=\"callout callout-critical\"></div><h3>Mẫu biến môi trường</h3>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># .env (NEVER commit this file)</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>Cấu hình 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>Mẫu Multi-Mind</h2>\n<p>Mỗi người dùng có thể có nhiều mind. Mẫu phổ biến:</p>\n<table>\n<thead>\n<tr>\n<th>Tên Mind</th>\n<th>Mục đích</th>\n</tr>\n</thead>\n<tbody><tr>\n<td><code>work</code></td>\n<td>Bộ nhớ liên quan công việc</td>\n</tr>\n<tr>\n<td><code>personal</code></td>\n<td>Sở thích cá nhân, gia đình</td>\n</tr>\n<tr>\n<td><code>project-synapse</code></td>\n<td>Ngữ cảnh dự án cụ thể</td>\n</tr>\n<tr>\n<td><code>learning-german</code></td>\n<td>Tiến độ học tập</td>\n</tr>\n<tr>\n<td><code>assistant-default</code></td>\n<td>Fallback mục đích chung</td>\n</tr>\n</tbody></table>\n<p>Sử dụng các Mind Key khác nhau cho các phiên LLM khác nhau để giữ ngữ cảnh tách\nbiệt.</p>\n<h2>Giới hạn tốc độ</h2>\n<table>\n<thead>\n<tr>\n<th>Phương thức xác thực</th>\n<th>Giới hạn</th>\n<th>Phạm vi</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Mind Key (header)</td>\n<td>Không</td>\n<td>Mỗi mind</td>\n</tr>\n<tr>\n<td>Mind Key (?key=)</td>\n<td>60/phút</td>\n<td>Mỗi IP</td>\n</tr>\n<tr>\n<td>JWT (header)</td>\n<td>Không</td>\n<td>Mỗi người dùng</td>\n</tr>\n<tr>\n<td>Endpoint công khai</td>\n<td>Không</td>\n<td>Toàn cầu</td>\n</tr>\n</tbody></table>\n<p>Header giới hạn tốc độ (<code>X-RateLimit-Limit</code>, <code>X-RateLimit-Remaining</code>,\n<code>Retry-After</code>) được bao gồm trong phản hồi khi áp dụng.</p>\n<h2>Bước tiếp theo</h2>\n<ul>\n<li><a href=\"/docs/getting-started/mind-key-vs-jwt\">Mind Key vs JWT</a> — khi nào dùng cái nào</li>\n<li><a href=\"/docs/api/memory\">Memory API</a> — những gì bạn có thể làm với Mind Key</li>\n<li><a href=\"/docs/api/user\">User API</a> — quản lý tài khoản với 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"]}