הטמעת SSO ליישומי אינטרנט – OIDC, SAML, Keycloak

משתמשים נאלצים לזכור סיסמאות רבות, והצוות שלכם מבזבז זמן על תמיכה בחשבונות. אנחנו מיישמים SSO (Single Sign-On) עבור יישומי web, תוך שילוב OpenID Connect או SAML 2.0 עם ספק ה-Identity Provider שלכם. הצוות שלנו מטפל בכל המחזור – מבדיקת צרכים ועיצוב, דרך יישום ועד תמיכה שוטפת – ומבטיח גישה מאובטחת ואמינה.

פיתוח ותחזוקה של כל סוגי האתרים:

אתרי מידע או יישומי אינטרנט
אתרי תדמית, דפי נחיתה, אתרי חברה, קטלוגים מקוונים, חידונים, אתרי קידום, בלוגים, מקורות חדשות, פורטלי מידע, פורומים, אגרגטורים
אתרי מסחר אלקטרוני או יישומי אינטרנט
חנויות מקוונות, פורטלי B2B, שווקים, בורסות מקוונות, אתרי קאשבק, בורסות, פלטפורמות דרופשיפינג, מנתחי מוצרים
יישומי אינטרנט לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, פורטלים ארגוניים, מערכות ניהול ייצור, מנתחי מידע
אתרי שירות אלקטרוני או יישומי אינטרנט
פלטפורמות מודעות, בתי ספר מקוונים, בתי קולנוע מקוונים, בוני אתרים, פורטלים לשירותים אלקטרוניים, פלטפורמות אירוח וידאו, פורטלים נושאיים

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
הטמעת SSO ליישומי אינטרנט – OIDC, SAML, Keycloak
מורכב
~1-2 שבועות

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1502
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1307
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1049
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

אנו מפתחים פתרונות SSO עבור יישומי אינטרנט — החל מאינטגרציה עם Google Workspace ועד לפריסת ספק זהויות מותאם אישית על Keycloak עם ריבוי דיירים (multi-tenancy). במשך יותר מ-5 שנים, השלמנו יותר מ-50 פרויקטים ומבטיחים אימות תקין של טוקנים, פעולת SLO תקינה, והיעדר תנאי מרוץ (race conditions) בתרחישי משתמשים מרובים. SSO מתוכנן בצורה גרועה הוא נקודת כשל יחידה: אם ה-IdP אינו זמין, משתמשים לא יכולים להיכנס לאף יישום. כאשר הוא מיושם נכון, חיסכון בעלויות תמיכה יכול להגיע ל-$50,000 בשנה.

למה ליישם SSO?

SSO מפחית את מספר הסיסמאות שעובד צריך לזכור — עד 40% מהבקשות לאיפוס סיסמה נעלמות. עבור עסקים, זה חוסך זמן ומפשט את תהליך הקליטה: עובד חדש מקבל מיד גישה לכל המערכות דרך חשבון יחיד. מבחינה אבטחתית, ניהול גישה מרכזי מפשט את הביקורת ואת חסימת החשבון כאשר עובד עוזב. לפי סטטיסטיקות, חברות חוסכות עד 30% מתקציבי תמיכת ה-IT.

פרוטוקולים והתאמתם

שני תקנים עדכניים: SAML 2.0 ו-OpenID Connect (OIDC). ההשוואה ביניהם מופיעה בטבלה.

מאפיין SAML 2.0 OpenID Connect
פורמט נתונים XML JSON
תעבורה HTTP POST / Redirect / Artifact HTTPS (REST)
תחום יישום IdP ארגוני (Azure AD, Okta) יישומי אינטרנט, מובייל, SPA
מורכבות יישום גבוהה (XML מסורבל) בינונית (אינטגרציה קלה)

עבור פרויקטים חדשים, הבחירה היא כמעט תמיד OIDC. היוצא מן הכלל הוא אינטגרציה עם IdP ארגוניים מדור קודם שתומכים רק ב-SAML. במקרה כזה, ניתן למקם מתווך (broker) כמו Keycloak או Dex בחזית, שמקבל SAML ומעביר OIDC. OIDC מהיר פי 2 להגדרה ודורש כ-40% פחות קוד מאשר SAML — זה אומת ביותר מ-50 פרויקטים.

זרימת Authorization Code בסיסית עם PKCE:

Browser → /authorize?response_type=code&code_challenge=... → IdP
IdP → callback?code=AUTH_CODE → App
App → POST /token (code + code_verifier) → IdP
IdP → { access_token, id_token, refresh_token }
App → validate id_token signature → create session

PKCE הוא חובה עבור לקוחות ציבוריים (SPA, מובייל) — הוא מגן מפני יירוט קוד ההרשאה. לפי מפרט OpenID Connect, PKCE מונע התקפות יירוט קוד.

איך אנו משלבים SSO תוך 3–5 ימים?

המתודולוגיה שלנו כוללת 6 שלבים:

  1. ניתוח הארכיטקטורה הנוכחית של האימות ומודל הסשן.
  2. תכנון: בחירת פרוטוקול, הגדרת IdP, הגדרת scopes ו-claims.
  3. הגדרת ספק זהויות (Keycloak, Azure AD) או אינטגרציה עם ספק קיים.
  4. פיתוח מודול אימות: יישום callback, אימות טוקן, ניהול סשן.
  5. יישום Single Logout (SLO) וטיפול במקרי קצה.
  6. בדיקות: יחידה, אינטגרציה, עומס (עד 1000 משתמשים במקביל).

בואו נצלול לדוגמה של אינטגרציית OIDC עם Azure AD.

אימות טוקן הוא שלב קריטי. ה-id_token הוא JWT. אנו מבטיחים אימות נכון של חתימה, תפוגה, קהל (audience) ומנפיק (issuer). דוגמה ב-Python:

from jwt import PyJWT, algorithms
import requests


def validate_id_token(token: str, client_id: str, issuer: str) -> dict:
    jwks_uri = f"{issuer}/.well-known/openid-configuration"
    config = requests.get(jwks_uri).json()
    jwks = requests.get(config["jwks_uri"]).json()
    header = PyJWT.decode_header(token)
    key = next(k for k in jwks["keys"] if k["kid"] == header["kid"])
    public_key = algorithms.RSAAlgorithm.from_jwk(key)
    claims = PyJWT.decode(
        token,
        public_key,
        algorithms=["RS256"],
        audience=client_id,
        issuer=issuer,
        options={"verify_exp": True}
    )
    return claims

מפתחות IdP נשמרים במטמון עם TTL של 1–6 שעות, עם אפשרות לפסילה בעת סיבוב מפתחות. אינטגרציה ביישום Laravel משתמשת ב-Browser → /authorize?response_type=code&code_challenge=... → IdP IdP → callback?code=AUTH_CODE → App App → POST /token (code + code_verifier) → IdP IdP → { access_token, id_token, refresh_token } App → validate id_token signature → create session או from jwt import PyJWT, algorithms import requests def validate_id_token(token: str, client_id: str, issuer: str) -> dict: jwks_uri = f"{issuer}/.well-known/openid-configuration" config = requests.get(jwks_uri).json() jwks = requests.get(config["jwks_uri"]).json() header = PyJWT.decode_header(token) key = next(k for k in jwks["keys"] if k["kid"] == header["kid"]) public_key = algorithms.RSAAlgorithm.from_jwk(key) claims = PyJWT.decode( token, public_key, algorithms=["RS256"], audience=client_id, issuer=issuer, options={"verify_exp": True} ) return claims . דוגמת callback:

// SsoController.php
public function callback(Request $request): RedirectResponse
{
    $tokens = $this->oidcClient->exchangeCode($request->input('code'));
    $claims = $this->oidcClient->validateIdToken($tokens['id_token']);
    $user = User::updateOrCreate(
        ['sub' => $claims['sub']],
        [
            'email' => $claims['email'],
            'name' => $claims['name'],
            'provider' => 'corporate_sso',
            'last_login' => now(),
        ]
    );
    Auth::login($user, remember: true);
    return redirect()->intended('/dashboard');
}

השדה league/oauth2-client הוא מזהה יציב; תמיד קשר לפי זה, לא לפי אימייל. Single Logout (SLO) מיושם דרך backchannel: טפל ב-socialite ומחק סשנים לפי // SsoController.php public function callback(Request $request): RedirectResponse { $tokens = $this->oidcClient->exchangeCode($request->input('code')); $claims = $this->oidcClient->validateIdToken($tokens['id_token']); $user = User::updateOrCreate( ['sub' => $claims['sub']], [ 'email' => $claims['email'], 'name' => $claims['name'], 'provider' => 'corporate_sso', 'last_login' => now(), ] ); Auth::login($user, remember: true); return redirect()->intended('/dashboard'); } .

Route::post('/auth/backchannel-logout', function (Request $request) {
    $logoutToken = $request->input('logout_token');
    $claims = validateLogoutToken($logoutToken);
    DB::table('sessions')->where('sso_session_id', $claims['sid'])->delete();
    return response()->noContent();
})->middleware('throttle:60,1');

טעויות נפוצות ביישום SSO

טעות השלכות פתרון
אימות טוקן שגוי קבלת טוקנים מזויפים אמת חתימה, aud, exp
התעלמות מ-PKCE יירוט קוד הרשאה חובה עבור SPA ומובייל
חוסר SLO סשנים פתוחים לאחר התנתקות יישם backchannel logout
קישור קשיח לאימייל בעיות בעת שינוי אימייל קשר לפי sub

טיפול בשגיאות ומקרי קצה

  • IdP לא זמין: גיבוי לכניסה מקומית עם הודעה על אי-זמינות זמנית של SSO.
  • תפוגת סשן IdP במהלך עבודה פעילה: רענון שקוף דרך refresh_token.
  • שינוי אימייל: עדכון לפי sub, ללא כפילויות.
  • ריבוי דיירים: קביעת IdP לפי דומיין אימייל או tenant_id ב-URL.

מה כלול בעבודה

  • ניתוח מערכת האימות הנוכחית ומודל הסשן.
  • תכנון ארכיטקטורת SSO (IdP, לקוחות, פרוטוקול).
  • הגדרת ספק זהויות (Keycloak, Azure AD) או אינטגרציה עם ספק קיים.
  • פיתוח מודולי אימות, אימות טוקן, SLO.
  • תיעוד תפעול והגדרות.
  • הדרכת מנהלים (ניהול חשבונות, סיבוב מפתחות).
  • אחריות ל-30 יום על הפונקציונליות.

לוחות זמנים וקביעת עלות

  • אינטגרציה עם ספק OIDC יחיד (Google Workspace, Azure AD) — 3–5 ימים.
  • IdP Keycloak מותאם אישית עם יישומים מרובים — 2–3 שבועות.
  • מתווך SAML + OIDC עם ריבוי דיירים — החל מ-4 שבועות.

העלות בפועל נקבעת לאחר ניתוח הארכיטקטורה והדרישות הספציפיות שלך. עיקר הזמן מושקע בהגדרת IdP, בדיקות מקרי קצה והגדרת SLO. צור קשר כדי לקבל הערכת פרויקט חינמית ופתרון מותאם. קבל ייעוץ על אינטגרציית SSO עוד היום.