Facepalm: עוד פרויקט עם אימות מותאם אישית. כל אחד מחמשת המיקרוסרוויסים נושא מסד נתונים משלו של גיבוב סיסמאות. OAuth עטוף בקביים של PHP ו-Node.js. אנו רואים זאת בכל מקום במערכות legacy. ארכיטקטורה כזו מכפילה טבלאות session מסוג N+1 ופגיעויות JWT (ללא סיבוב מפתחות) וחסרה כניסה אחידה (SSO) בין השירותים. החיסכון הממוצע ברישוי בעת מעבר מ-Auth0 או Okta הוא 60–80%.
Keycloak הוא ניהול זהויות וגישה (Identity and Access Management) בקוד פתוח מבית Red Hat. חלופה מתארחת עצמית ל-Auth0 ו-Okta תומכת ב-OpenID Connect, OAuth 2.0, SAML 2.0. עם ניסיון של 15+ שנים ב-IAM ויותר מ-100 אינטגרציות מוצלחות, השתמשנו ב-Keycloak בסביבת production במשך שנים רבות, ופרסנו 15+ אשכולות תעשייתיים. האימות פועל ללא תקלות גם ב-10,000 RPS. צרו קשר לניתוח תשתית ה-IAM שלכם.
למה Keycloak עדיף על אימות מותאם אישית?
פתרונות מותאמים אישית סובלים לעיתים קרובות מבעיות: טבלאות session מסוג N+1, פגיעויות JWT (ללא סיבוב), וחוסר ב-SSO. Keycloak פותר אותן:
- מרשם משתמשים יחיד — ללא כפילות נתונים.
- סיבוב אוטומטי של מפתח חתימת JWT — מפחית סיכון לפגיעה.
- תמיכה ב-LDAP/AD — עובדים מתחברים עם פרטי כניסה ארגוניים.
- ברוקר לרשתות חברתיות — OAuth עבור Google/GitHub ללא קוד נוסף.
Keycloak מספק גם ממשק אימות מוכן: דפי התחברות, הרשמה עצמית, איפוס סיסמה, MFA. הכל ניתן להגדרה דרך קונסולת הניהול. המפתח מתמקד בלוגיקה עסקית במקום בכתיבת middleware.
השוואה בין Keycloak ליישום מותאם אישית
| קריטריון | Keycloak | פתרון מותאם אישית |
|---|---|---|
| פיתוח | שעות של הגדרה | שבועות או חודשים של קוד |
| אבטחה | מוסמך, OWASP top-10 | סיכון לשגיאות |
| קנה מידה | אופקי, אשכול | דורש עבודה מחדש |
| תמיכה בפרוטוקולים | OIDC, OAuth2, SAML מובנים | רק OAuth2 בסיסי |
איך להגדיר אינטגרציית LDAP?
בקונסולת הניהול של Keycloak:
- User Federation → הוספת ספק → LDAP.
- ציינו Connection URL, Bind DN, Users DN.
- הגדירו מיפוי מאפיינים: CN → שם משתמש, mail → דוא"ל.
לאחר ההגדרה, עובדים מתחברים עם פרטי כניסה ארגוניים ישירות דרך Keycloak. זה חשוב לחברות עם Active Directory. התהליך אורך 1–2 ימים ואינו דורש שינויים ביישומים.
פריסת Keycloak: Docker והגדרה
אנו ממליצים על Docker Compose עבור Keycloak עם PostgreSQL:
---
version: '3.8'
services:
keycloak:
image: quay.io/keycloak/keycloak:latest
environment:
- KEYCLOAK_ADMIN=admin
- KEYCLOAK_ADMIN_PASSWORD=admin
- KC_DB=postgres
- KC_DB_URL=jdbc:postgresql://postgres:5432/keycloak
- KC_DB_USERNAME=keycloak
- KC_DB_PASSWORD=password
ports:
- '8080:8080'
depends_on:
- postgres
postgres:
image: postgres:15
environment:
- POSTGRES_DB=keycloak
- POSTGRES_USER=keycloak
- POSTGRES_PASSWORD=password
---
לאחר ההפעלה, היכנסו לקונסולת הניהול, צרו realm ו-client.
הגדרת Realm ו-Client
- צרו Realm (אזור אימות מבודד לוגית).
- צרו Client עבור יישום האינטרנט:
- סוג Client: OpenID Connect.
- אימות Client: מופעל (סודי).
- כתובות redirect חוקיות:
version: '3.8' services: keycloak: image: quay.io/keycloak/keycloak:latest environment: - KEYCLOAK_ADMIN=admin - KEYCLOAK_ADMIN_PASSWORD=admin - KC_DB=postgres - KC_DB_URL=jdbc:postgresql://postgres:5432/keycloak - KC_DB_USERNAME=keycloak - KC_DB_PASSWORD=password ports: - '8080:8080' depends_on: - postgres postgres: image: postgres:15 environment: - POSTGRES_DB=keycloak - POSTGRES_USER=keycloak - POSTGRES_PASSWORD=password. - כתובות post logout redirect חוקיות:
https://yourdomain.com/auth/callback.
- שמרו את Client ID ו-Client Secret (לשונית Credentials).
אינטגרציה עם Laravel דרך Socialite
// config/services.php
'keycloak' => [
'client_id' => env('KEYCLOAK_CLIENT_ID'),
'client_secret' => env('KEYCLOAK_CLIENT_SECRET'),
'redirect' => env('KEYCLOAK_REDIRECT_URI'),
'base_url' => env('KEYCLOAK_BASE_URL'), // e.g. http://localhost:8080
'realm' => env('KEYCLOAK_REALM'),
], // Socialite driver use Socialite; $user = Socialite::driver('keycloak')->user(); אימות JWT ישיר (עבור API)
Keycloak מפרסם JWKS בכתובת URL סטנדרטית. ה-API יכול לאמת JWT ישירות ללא קריאה ל-Keycloak:
use Firebase\JWT\JWK;
use Firebase\JWT\JWT;
$jwks = json_decode(file_get_contents('https://keycloak/auth/realms/{realm}/protocol/openid-connect/certs'), true);
$keys = JWK::parseKeySet($jwks);
$decoded = JWT::decode($token, $keys, ['RS256']); התנתקות
Keycloak תומך בהתנתקות front-channel ו-back-channel (RP-Initiated Logout):
$redirectUri = 'https://yourdomain.com';
$logoutUrl = 'https://keycloak/auth/realms/{realm}/protocol/openid-connect/logout?' . http_build_query([
'id_token_hint' => $idToken,
'post_logout_redirect_uri' => $redirectUri
]);
return redirect($logoutUrl); ציר זמן ועלות
מקרה בוחן: מסחר אלקטרוני עם SSO ו-LDAP
פרויקט: 3 frontends, 2 APIs, AD legacy. תוצאות:
- כניסה אחידה ל-5000 עובדים דרך AD.
- זמן האימות הופחת ב-40%.
- עלויות הרישוי של Auth0 ירדו לאפס (חיסכון של כ-$50,000 בשנה).
| שלב | מה אנו עושים | זמן |
|---|---|---|
| פריסת Keycloak | Docker + PostgreSQL, הגדרת SSL | יום אחד |
| Realm ו-clients | יצירת realm, client, תפקידים, משתמשים | 0.5 יום |
| אינטגרציה עם Laravel | Socialite, callback, sessions | 1.5 ימים |
| JWT middleware | אימות טוקנים, רענון טוקנים | יום אחד |
| LDAP/AD (אופציונלי) | הגדרת user federation, סנכרון | 1–2 ימים |
| בדיקות | יחידה, אינטגרציה, בדיקות עומס | יום אחד |
סה"כ: 5–7 ימי עבודה. עלות טיפוסית מתחילה ב-$3,000. בקשו ייעוץ להערכה והצעה מסחרית.
תוצרים
- תשתית Keycloak עובדת (Docker Compose, SSL, גיבויים).
- Realm עם clients ותפקידים מוגדרים.
- אינטגרציה עם Laravel דרך Socialite (או כל framework אחר).
- JWT middleware עבור API.
- סנכרון LDAP/AD (לפי בקשה).
- תיעוד: דיאגרמות זרימה, פרטי הגדרה, סקריפטים לפריסה.
- הקלטת וידאו של הדרכת צוות (שעה אחת).
- תמיכה לחודש אחד (Telegram/דוא"ל).
יש לנו ניסיון רב עם Keycloak, 15+ אינטגרציות מוצלחות. מומחי Red Hat מוסמכים. עם 5 שנים בשוק ויותר מ-100 פרויקטים, אנו מבטיחים פריסה חלקה. אחריות: פריסת Keycloak ללא השבתה, התאמה לדרישות הרגולציה שלכם, והדרכת הצוות. צרו קשר להערכת פרויקט — ננתח את התשתית שלכם ונציע פתרון אופטימלי.







