פרק 7
OAuth וסודות
שרתי MCP רבים פועלים מול מערכות ענן רגישות כמו חשבונות GitHub, בסיסי נתונים, ערוצי Slack ומערכות לניהול משימות. אבטחת ערוץ התקשורת ושמירה נכונה על טוקנים ומפתחות API הן קריטיות למניעת חשיפת מידע ודליפת הרשאות.
#מנגנון האימות ב-OAuth 2.0
כאשר מחברים שרת HTTP מרוחק הדורש אימות משתמש (לדוגמה Linear או Sentry):
- זיהוי דרישת אימות: המארח (Claude Code או Grok CLI) פונה לשרת ה-MCP ומקבל דרישת אימות (Authentication Challenge).
- פתיחת דפדפן מקומי: המארח מפיק כתובת אימות מאובטחת (באמצעות תקן OAuth 2.0 עם PKCE) ופותח את הדפדפן שלכם ישירות בעמוד האישור של השירות החיצוני.
- אישור ההרשאות: אתם מתחברים לשירות החיצוני ומאשרים לסוכן גישה למשאבים המבוקשים.
- קבלת טוקן ושמירה: השרת החיצוני מחזיר קוד אימות, הלקוח המקומי מחליף אותו ב-Access Token ו-Refresh Token, ושומר אותו במאגר מאובטח על המחשב שלכם.
+----------+ 1. בקשת חיבור +------------+
| MCP Host | =======================> | MCP Server |
| (Client)| <======================= | (Remote) |
+----+-----+ 2. דרישת אימות OAuth +------------+
|
| 3. פתיחת דפדפן
v
+----------+ 4. אישור המשתמש +------------+
| Browser | =======================> | Auth OAuth |
| (דפדפן) | <======================= | Provider |
+----+-----+ 5. החזרת קוד אימות +------------+
|
| 6. החלפה ל-Token ושמירה מקומית
v
+------------------------------------+
| Local Credentials (~/.grok / config)|
+------------------------------------+#אחסון אישורים מקומי
- ב-Grok CLI: האישורים נשמרים בקובץ ייעודי בנתיב
~/.grok/mcp_credentials.json. הקובץ נוצר אוטומטית עם הרשאות מערכת קפדניות (chmod 600ב-Linux/macOS), המאפשרות קריאה וכתיבה אך ורק למשתמש שלכם. - ב-Claude Code: האישורים מנוהלים ישירות דרך מנגנון האבטחה של המשתמש.
בסביבות שרת ללא דפדפן גרפי (Headless / SSH / CI), ניתן להשתמש ב-Device Code Flow או לספק מראש טוקן סטטי דרך כותרת HTTP ייעודית.
#ניהול סודות ומניעת דליפה ל-Git
אחת הטעויות הנפוצות ביותר היא כתיבת מפתחות API סודיים ישירות בקובץ תצורה של הפרויקט (.mcp.json או .grok/config.toml), ואז דחיפת הקובץ (Commit) ל-Git.
#1. שימוש באינטרפולציה של משתני סביבה ב-TOML
בקובצי config.toml, השתמשו בתחביר ${VARIABLE_NAME}:
[mcp_servers.internal_service]
url = "https://mcp.internal.company.com/mcp"
headers = { "Authorization" = "Bearer ${COMPANY_MCP_TOKEN}" }הטוקן עצמו ייטען בזמן ריצה ממשתנה הסביבה שהוגדר ב-Shell שלכם או בקובץ .env מקומי (שנמצא בתוך .gitignore).
#2. העברת סודות ב-CLI
בעת הוספת שרתי stdio, העבירו סודות דרך משתני סביבה של המעטפת:
# קלוד קוד
claude mcp add --env API_KEY="$MY_SECRET_KEY" --transport stdio myserver -- npx -y my-mcp-pkg
# גרוק CLI
grok mcp add myserver -e API_KEY="$MY_SECRET_KEY" -- npx -y my-mcp-pkg#כללי ברזל לאבטחת שרתי MCP
- לעולם אל תעתיקו קובצי Credentials: לעולם אל תדביקו תוכן של
mcp_credentials.jsonאו קבצי הגדרות עם סודות בתוך טיקטים, תגובות ב-GitHub או צ'אטים משותפים. - הגבילו הרשאות של מפתחות API: אם אתם מפיקים מפתח API עבור שרת MCP (למשל מפתח ל-Postgres או ל-AWS), העניקו לו אך ורק את ההרשאות המינימליות הנחוצות (Least Privilege), ועדיפות לקריאה בלבד (Read-Only) אלא אם נדרשת כתיבה במפורש.
- בדיקת פרויקטים חדשים (Untrusted Repositories): כאשר אתם משבטים פרויקט זר המכיל קובץ
.mcp.jsonאו.grok/config.toml, בדקו תמיד אילו פקודות מוגדרות בו לפני שאתם מאשרים את הפעלת השרתים.