דלגו לתוכן

עזר להגדרת SSO

כל מה שניתן להגדיר בכניסה מאוחדת, במקום אחד. הערכים יושבים בשורות של sso_connections ב־global.db (ברמת השרת במכוון), ונערכים דרך הגדרות → שרת → כניסה מאוחדת או דרך פעולות ה־RPC של sso.*. השורה השמורה היא מקור האמת היחיד — אין נתיב סביבה של CC_SAML_* / CC_OIDC_* (חיבור שיכול להגיע משני מקומות הוא חיבור שמסך ההגדרות יכול לחלוק עליו).

שדה חל על ברירת מחדל משמעות
enabled שניהם כבוי כניסות רשאיות להשתמש בחיבור הזה
idpMetadataXml SAML — ה־XML מסוג EntityDescriptor של ה־IdP (נדרש כדי להפעיל)
spEntityId SAML <origin>/saml מזהה הישות שלנו, ננעל כשהמקור משתנה
emailAttribute SAML email המאפיין שנושא את האימייל; NameID בצורת אימייל הוא חלופת ברירת המחדל
displayNameAttribute SAML displayName מאפיין שם התצוגה
groupsAttribute SAML groups מאפיין שמות הקבוצות
clockSkewSeconds SAML 90 סובלנות סטיית שעון באימות תוקף
allowIdpInitiated SAML כבוי קבלת תגובות לא מבוקשות (ללא InResponseTo)
wantResponseSigned SAML כבוי דרישת חתימה על שורש התגובה (חתימות הצהרה נדרשות תמיד)
issuer OIDC — כתובת הבסיס של ה־Issuer (נדרשת כדי להפעיל)
clientId OIDC — מזהה לקוח ציבורי (נדרש כדי להפעיל)
clientSecret OIDC — ללקוחות חסויים בלבד; נשמר בקובץ הסודות בהרשאות 0600, ולעולם לא במסד הנתונים — לכתיבה בלבד דרך RPC (sso.getConfig מדווח על clientSecretPresent)
groupsClaim OIDC groups ה־Claim שנושא את שמות הקבוצות
defaultRole שניהם member התפקיד כשאף קבוצה אינה ממופה — לעולם לא owner
groupRoleMap שניהם {} קבוצה → תפקיד; מיפויים ל־owner נדחים בשמירה
autoMember שניהם פועל הוספה אוטומטית של משתמשים לכל סביבת עבודה בכניסה הראשונה
allowJit שניהם פועל הקצאת משתמשים לא מוכרים בכניסה

חיבורי SSO אינם נזרעים מהסביבה. דגל תהליך אחד שנותר נוגע להעברה לדפדפן, ולא לשורת החיבור:

משתנה / דגל משמעות
--web-client-url / CC_SERVER_WEB_CLIENT_URL המקור שאליו קריאות ה־callback של SSO מפנות את הדפדפן (פרטי הגישה עוברים בקטע ה־URL). כשזה לא מוגדר, ההעברה נשארת באותו מקור.

כתובת ה־Issuer עצמה חייבת להיות https (http מתקבל רק עבור Issuer של לולאה מקומית: localhost, 127.0.0.1 ו־::1).

נקודת קצה אימות מטרה
GET /saml/login?relay=… ללא (הפניה מחדש) התחלת כניסה ביוזמת ה־SP; relay=desktop מעביר לאפליקציה, relay=web-popup שולח postMessage ללשונית החיבור הממתינה (שמצהירה על ה־client_origin שלה, שמכובד רק כשרשימת המקורות המורשים נותנת בו אמון)
POST /saml/acs ללא (POST מה־IdP) צרכן ההצהרות — מאמת, מקצה ומנפיק
GET /saml/metadata ללא ה־EntityDescriptor של ה־SP שלנו
GET /oidc/login?relay=… / GET /oidc/callback ללא סבב ה־OIDC; relay=desktop מעביר לאפליקציה, relay=web-popup ללשונית החיבור הממתינה (אותה מוסכמת client_origin)
GET /auth/providers ללא, CORS * בדיקת מסך החיבור: חיבורי ה־SSO המוצעים (id/kind/label) + pairingEnabled
/scim/v2/Users… Bearer (אסימון SCIM) Users: יצירה/שליפה/רשימה+סינון/PUT/PATCH/DELETE
/scim/v2/Groups Bearer לקריאה בלבד; דחיפת קבוצות מחזירה 501 במכוון
/scim/v2/ServiceProviderConfig Bearer מסמך יכולות

כל פעולות sso.* הן בהיקף השרת ומוגבלות לבעל השרת (המפעיל של ההתקנה, ServerAuthority.serverOwner). בעלות על סביבת עבודה אינה מספיקה; צימוד לבדו לעולם אינו מקנה אותן.

פעולה מטרה
sso.getConfig החיבור השמור עבור סוג
sso.saveConfig אימות, שמירה והחלה בזמן אמת
sso.status דגלי הפעלה/הגדרה, נוכחות אסימון SCIM, המקור הקנוני
sso.testConnection בדיקת חיבור בלי סבב הדפדפן (SAML: פענוח מטא־נתונים ובניית AuthnRequest; OIDC: גילוי ה־Issuer), עם ערכים אופציונליים שלא נשמרו מהמסך
sso.spMetadata הפקת ה־EntityDescriptor של ה־SP עבור מקור
sso.setPairingEnabled התרה/איסור של צימוד ידני (קודי הזמנה, מפתחות צימוד); סירוב לכבות אותו כשאין חיבור SSO עובד מגן מפני נעילה
sso.sessionPolicy קריאת הגיל המרבי של פרטי הגישה במכשיר ופסק הזמן ללא פעילות (בדקות; 0 = לא מוגדר)
sso.setSessionPolicy קביעת הגבולות האלה; נאכפים בבדיקת המכשיר, ואינם מדווחים ללקוחות
sso.scimRegenerateToken יצירה והחזרה של אסימון ה־Bearer של SCIM (פעם אחת)

כשלים של cc_saml_verify_response נושאים קוד יציב:

קוד משמעות
signature חתימה חסרה, לא מהימנה או שעבר שינוי, או אלגוריתם/טרנספורמציה אסורים
expired מחוץ ל־NotBefore/NotOnOrAfter (מעבר לסטייה)
audience הגבלת קהל היעד אינה מפרטת אותנו
destination יעד התגובה אינו ה־ACS שלנו
request_match ה־InResponseTo אינו תואם בקשה ממתינה, או תגובה לא מבוקשת כשזו אסורה
issuer ה־Issuer אינו ה־IdP המוגדר
recipient הנמען באישור הנושא אינו ה־ACS שלנו
malformed כשל ברמת ה־XML/הסכימה
status הסטטוס שדיווח ה־IdP אינו Success
invalid / internal כל דבר אחר / כשל בתפר
  • sso_connections (global.db) — שורה אחת לכל סוג, חוצה סביבות עבודה במכוון.
  • users.sso_subject + users.sso_issuer — נעיצת הנושא של הספק, ייחודית לכל (issuer, subject) באמצעות אינדקס חלקי.
  • users.deactivated_at — חותמת ההשבתה של SCIM.
  • אסימון ה־Bearer של SCIM וסוד הלקוח של OIDC נמצאים בקובץ הסודות בהרשאות 0600, ולעולם לא במסד הנתונים.