דילוג לתוכן

חיפוש בתיעוד

הקלידו כדי לחפש בכל דפי התיעוד.

תפריט התיעוד
איך עושיםקהל יעד · אנשי תפעול ומפתחים

אימות עם Keycloak

אימות OIDC עבור ה-REST API ושרת ה-MCP

דף זה תורגם באופן אוטומטי מאנגלית. אם יש הבדל כלשהו, המקור הוא הקובע.לקריאת המקור באנגלית

איך Agent-Lab משתמש ב-Keycloak

Keycloak מנהל אימות והרשאות באמצעות OpenID Connect. כאשר auth.enabled הוא true (ראו את חומר העזר לתצורה):

  • ה-middleware של FastAPI מאמת bearer tokens מול ה-JWKS של ה-realm בכל בקשה, עם ההחרגות הסטנדרטיות (/auth/*, /status/*, /docs, /openapi.json, /mcp, /static);
  • ה-router של /auth חושף התחברות, חידוש, פרופיל ונקודת קצה להחלפת טוקנים של Microsoft Entra ID;
  • שרת ה-MCP מאמת לקוחות דרך OAuth proxy המגובה באותו realm, ומפרסם את נקודות הקצה הסטנדרטיות של מטא-נתוני .well-known.

הגדרת realm, לקוח וחשבון שירות

השלבים שלהלן משתמשים ב-Keycloak Admin API. קודם מגדירים את פרטי ההתחברות של המנהל ואת נקודת הקצה:

export ADMIN_USER=<admin_username>
export ADMIN_PASS=<admin_password>
export ADMIN_TOKEN=$(curl -s -X POST "https://<auth_fqdn>/realms/master/protocol/openid-connect/token" \
    -d "username=${ADMIN_USER}&password=${ADMIN_PASS}&grant_type=password&client_id=admin-cli" | jq -r '.access_token')

יצירת realm (מחליפים את <realm_name>):

curl -X POST https://<auth_fqdn>/admin/realms \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${ADMIN_TOKEN}" \
  -d '{"realm": "<realm_name>", "enabled": true}'

יצירת לקוח עבור Agent-Lab:

curl -X POST https://<auth_fqdn>/admin/realms/<realm_name>/clients \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${ADMIN_TOKEN}" \
  -d '{
    "clientId": "<client_name>",
    "enabled": true,
    "protocol": "openid-connect",
    "publicClient": false,
    "redirectUris": ["https://<agent_lab_fqdn>/*"],
    "standardFlowEnabled": true,
    "clientAuthenticatorType": "client-secret"
  }'

קבלת סוד הלקוח:

export CLIENT_ID=$(curl -X GET "https://<auth_fqdn>/admin/realms/<realm_name>/clients?clientId=<client_name>" \
  -H "Authorization: Bearer ${ADMIN_TOKEN}" | jq -r '.[0].id')

export CLIENT_SECRET=$(curl -X GET "https://<auth_fqdn>/admin/realms/<realm_name>/clients/${CLIENT_ID}/client-secret" \
  -H "Authorization: Bearer ${ADMIN_TOKEN}" | jq -r '.value')

ערכים אלה ממופים למפתחות התצורה auth.* (auth.url, auth.realm, auth.client_id, auth.client_secret) — שומרים אותם במטען של Vault בהתאם לחומר העזר לתצורה.

יצירת משתמש לחשבון שירות:

curl -X POST https://<auth_fqdn>/admin/realms/<realm_name>/users \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer ${ADMIN_TOKEN}" \
  -d '{
    "username": "<username>",
    "enabled": true,
    "email": "<username>@example.com",
    "credentials": [{"type": "password", "value": "<user_password>", "temporary": false}]
  }'

במידת הצורך, מכווננים תפקידים ו-mappers בממשק המשתמש של Keycloak.

הנפקה ואימות של טוקנים

קבלת טוקן משתמש (password grant — אותו תהליך ש-POST /auth/login מבצע בצד האפליקציה):

export USER_TOKEN=$(curl -s -X POST https://<auth_fqdn>/realms/<realm_name>/protocol/openid-connect/token \
  -d "grant_type=password" \
  -d "client_id=<client_name>" \
  -d "client_secret=${CLIENT_SECRET}" \
  -d "username=<username>" \
  -d "password=<user_password>" | jq -r '.access_token')

curl -s https://<agent_lab_fqdn>/agents/list -H "Authorization: Bearer $USER_TOKEN" | jq

טוקנים מתחדשים דרך POST /auth/renew, ואת המשתמשים שאומתו ב-Microsoft Entra ID אפשר להחליף בטוקנים של האפליקציה דרך POST /auth/exchange (תהליך authorization-code עם PKCE, המגובה בפרטי ההתחברות של Entra ID שבתצורה).

הקצאה אוטומטית

מודול ה-Terraform terraform/12_agent-lab-auth-realm/ (חלק ממדריך הפריסה) מקצה את ה-realm, הלקוח וחשבון השירות עבור פריסת הדוגמה — בסביבות אמיתיות כדאי להשתמש בו במקום בשלבים הידניים.