{"title":"인증 및 Mind Key","slug":"authentication","category":"getting-started","summary":"Synapse 인증 작동 방식: 에이전트용 Mind Key, 사람용 JWT, URL 전용 도구용 ?key=.","audience":["human","llm"],"tags":["auth","mind-key","jwt","security"],"difficulty":"beginner","updated":"2026-06-27","word_count":435,"read_minutes":2,"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":"ko","translated":true,"requested_lang":"ko","content_markdown":"\n# 인증 및 Mind Key\n\nSynapse는 두 가지 인증 방법을 사용하며, 각각 다른 사용 사례에 최적화되어\n있습니다. 신뢰할 수 있는 통합을 구축하려면 차이를 이해하는 것이 필수적입니다.\n\n## 두 가지 인증 방법\n\n| 방법 | 사용 사례 | 속도 제한 | 만료 |\n|--------|----------|------------|--------|\n| **Mind Key** | LLM 에이전트, 자동화 도구 | 없음 (헤더) / 분당 60회 (쿼리) | 없음 |\n| **JWT** | 사용자 대면 UI, 계정 작업 | 없음 | 7일 |\n\n## Mind Key (에이전트용)\n\nMind Key는 테넌트 범위의 API 토큰입니다. 단일 마인드의 데이터 (메모리, 작업,\n채팅, 스크립트 등)를 인증합니다. 다음에 사용하십시오:\n\n- API를 호출하는 LLM 에이전트\n- 백그라운드 자동화 스크립트\n- MCP 서버 구성\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회**로 제한됩니다.\n> Bearer 헤더는 속도 제한이 없습니다. 클라이언트가 커스텀 헤더를 지원할\n> 때마다 헤더를 사용하십시오.\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### 마인드 나열\n\n```bash\ncurl -H \"Authorization: Bearer YOUR_JWT\" \\\n     https://synapse.schaefer.zone/minds\n```\n\n### 마인드 삭제 (되돌릴 수 없음!)\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는 특정 마인드가 아닌 **사용자 계정**을 인증합니다. 다음에 사용하십시오:\n\n- 계정 가입 및 로그인\n- 마인드 생성 / 나열 / 삭제\n- 다른 사용자와 마인드 공유\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일** 후에 만료됩니다. JWT가 만료되면 `/login`을 다시 호출하여\n새 것을 받으십시오. Mind Key는 만료되지 않으므로 기존 에이전트 통합은\n계속 작동합니다.\n\n## 보안 모범 사례\n\n> [!CRITICAL]\n> - **Mind Key를 git에 절대 커밋하지 마십시오.** 환경 변수를 사용하십시오.\n> - **Mind Key를 로그에 남기지 마십시오.** 로그에서 마스킹 (`mk_***...***xyz`).\n> - 유출이 의심되면 **키 교체** (마인드 삭제, 새로 생성).\n> - 키가 유출된 경우 피해 범위를 제한하기 위해 **프로젝트당 하나의 마인드 사용**.\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 서버 구성\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## 다중 마인드 패턴\n\n각 사용자는 여러 마인드를 가질 수 있습니다. 일반적인 패턴:\n\n| 마인드 이름 | 용도 |\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 (헤더) | 없음 | 마인드별 |\n| Mind Key (?key=) | 분당 60회 | IP별 |\n| JWT (헤더) | 없음 | 사용자별 |\n| 공용 엔드포인트 | 없음 | 전역 |\n\n속도 제한 헤더 (`X-RateLimit-Limit`, `X-RateLimit-Remaining`, `Retry-After`)는\n해당되는 경우 응답에 포함됩니다.\n\n## 다음 단계\n\n- [Mind Key vs 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는 두 가지 인증 방법을 사용하며, 각각 다른 사용 사례에 최적화되어\n있습니다. 신뢰할 수 있는 통합을 구축하려면 차이를 이해하는 것이 필수적입니다.</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 에이전트, 자동화 도구</td>\n<td>없음 (헤더) / 분당 60회 (쿼리)</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 (에이전트용)</h2>\n<p>Mind Key는 테넌트 범위의 API 토큰입니다. 단일 마인드의 데이터 (메모리, 작업,\n채팅, 스크립트 등)를 인증합니다. 다음에 사용하십시오:</p>\n<ul>\n<li>API를 호출하는 LLM 에이전트</li>\n<li>백그라운드 자동화 스크립트</li>\n<li>MCP 서버 구성</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회**로 제한됩니다.\nBearer 헤더는 속도 제한이 없습니다. 클라이언트가 커스텀 헤더를 지원할\n때마다 헤더를 사용하십시오.</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>마인드 나열</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>마인드 삭제 (되돌릴 수 없음!)</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>을 인증합니다. 다음에 사용하십시오:</p>\n<ul>\n<li>계정 가입 및 로그인</li>\n<li>마인드 생성 / 나열 / 삭제</li>\n<li>다른 사용자와 마인드 공유</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> 후에 만료됩니다. JWT가 만료되면 <code>/login</code>을 다시 호출하여\n새 것을 받으십시오. Mind Key는 만료되지 않으므로 기존 에이전트 통합은\n계속 작동합니다.</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 서버 구성</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>다중 마인드 패턴</h2>\n<p>각 사용자는 여러 마인드를 가질 수 있습니다. 일반적인 패턴:</p>\n<table>\n<thead>\n<tr>\n<th>마인드 이름</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 (헤더)</td>\n<td>없음</td>\n<td>마인드별</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 (헤더)</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>)는\n해당되는 경우 응답에 포함됩니다.</p>\n<h2>다음 단계</h2>\n<ul>\n<li><a href=\"/docs/getting-started/mind-key-vs-jwt\">Mind Key vs 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"]}