İçeriğe geç

SSO yapılandırması referansı

Tek oturum açmayla ilgili yapılandırılabilir her şey tek bir yerde. Değerler global.db içindeki sso_connections satırlarında yaşar (tasarım gereği sunucu genelinde) ve Ayarlar → Sunucu → Tek oturum açma ekranından ya da sso.* RPC işlemleriyle düzenlenir. Kaydedilen satır tek doğruluk kaynağıdır — CC_SAML_* / CC_OIDC_* ortam yolu yoktur (iki yerden gelebilen bir bağlantı, ayarlar ekranının çelişebileceği bir bağlantıdır).

Alan Geçerli olduğu Varsayılan Anlamı
enabled her ikisi kapalı oturum açmalar bu bağlantıyı kullanabilir
idpMetadataXml SAML — IdP’nin EntityDescriptor XML’i (etkinleştirmek için gerekli)
spEntityId SAML <origin>/saml origin değişebildiği için sabitlenen varlık kimliğimiz
emailAttribute SAML email e-postayı taşıyan öznitelik; e-posta biçimli bir NameID yedektir
displayNameAttribute SAML displayName görünen ad özniteliği
groupsAttribute SAML groups grup adları özniteliği
clockSkewSeconds SAML 90 yaşam süresi doğrulaması için saat kayması payı
allowIdpInitiated SAML kapalı istem dışı Response’ları kabul et (InResponseTo yok)
wantResponseSigned SAML kapalı Response kökünde imza zorunlu kıl (assertion imzaları her zaman zorunludur)
issuer OIDC — issuer temel URL’si (etkinleştirmek için gerekli)
clientId OIDC — herkese açık istemci kimliği (etkinleştirmek için gerekli)
clientSecret OIDC — yalnızca gizli istemciler için; 0600 secrets dosyasında saklanır, asla veritabanında değil — RPC üzerinden yalnızca yazılabilir (sso.getConfig clientSecretPresent bildirir)
groupsClaim OIDC groups grup adlarını taşıyan claim
defaultRole her ikisi member hiçbir grup eşlenmediğinde rol — asla owner
groupRoleMap her ikisi {} grup → rol; owner eşlemeleri kaydetme sırasında reddedilir
autoMember her ikisi açık ilk oturum açmada kullanıcıları her çalışma alanına otomatik ekle
allowJit her ikisi açık oturum açmada bilinmeyen kullanıcıları sağla

SSO bağlantıları ortamdan beslenmez. Geriye kalan tek süreç bayrağı, bağlantı satırıyla değil tarayıcı devri ile ilgilidir:

Değişken / bayrak Anlamı
--web-client-url / CC_SERVER_WEB_CLIENT_URL SSO geri çağırmalarının tarayıcıyı yönlendirdiği origin (kimlik bilgisi URL fragment’ında taşınır). Ayarlanmazsa devir aynı origin’de kalır.

Issuer URL’sinin kendisi https olmalıdır (http yalnızca loopback issuer’ları localhost, 127.0.0.1 ve ::1 için kabul edilir).

Uç nokta Kimlik doğrulama Amaç
GET /saml/login?relay=… yok (yönlendirme) SP tarafından başlatılan oturum açmayı başlatır; relay=desktop uygulamaya devreder, relay=web-popup bekleyen bağlanma sekmesine postMessage gönderir (sekme kendi client_origin değerini bildirir; yalnızca origin izin listesi ona güveniyorsa dikkate alınır)
POST /saml/acs yok (IdP POST) assertion tüketicisi — doğrular, sağlar, üretir
GET /saml/metadata yok SP EntityDescriptor’ımız
GET /oidc/login?relay=… / GET /oidc/callback yok OIDC gidiş-dönüşü; relay=desktop uygulamaya devreder, relay=web-popup bekleyen bağlanma sekmesine (aynı client_origin kuralı)
GET /auth/providers yok, CORS * bağlanma ekranı yoklaması: sunulan SSO bağlantıları (id/kind/label) + pairingEnabled
/scim/v2/Users… Bearer (SCIM token’ı) Users oluşturma/get/listeleme+filtreleme/PUT/PATCH/DELETE
/scim/v2/Groups Bearer salt okunur; grup push’u tasarım gereği 501 yanıtı verir
/scim/v2/ServiceProviderConfig Bearer yetenek belgesi

Tüm sso.* işlemleri sunucu kapsamlıdır ve sunucu sahibiyle sınırlıdır (kurulumun işletmecisi, ServerAuthority.serverOwner). Bir çalışma alanına sahip olmak yeterli değildir; eşleştirme tek başına bunları asla vermez.

İşlem Amaç
sso.getConfig bir tür için kaydedilmiş bağlantı
sso.saveConfig doğrular, kalıcı hâle getirir ve canlı uygular
sso.status etkin/yapılandırılmış bayraklar, SCIM token’ının varlığı, kurallı origin
sso.testConnection tarayıcı gidiş-dönüşü dışında bir bağlantıyı dener (SAML: metadata ayrıştırma + AuthnRequest oluşturma; OIDC: issuer keşfi); ekrandaki kaydedilmemiş değerleri isteğe bağlı olarak kullanır
sso.spMetadata bir origin için SP EntityDescriptor’ını üretir
sso.setPairingEnabled elle eşleştirmeye izin verir/yasaklar (davet kodları, eşleştirme anahtarları); çalışan bir SSO bağlantısı yokken bunu devre dışı bırakmayı reddetmek kilitlenmeye karşı korur
sso.sessionPolicy kurulumun cihaz kimlik bilgisi azami yaşını ve boşta kalma zaman aşımını okur (dakika; 0 = ayarlanmamış)
sso.setSessionPolicy bu sınırları belirler; cihaz denetiminde uygulanır, istemcilere duyurulmaz
sso.scimRegenerateToken SCIM bearer token’ını üretir + döndürür (bir kez)

cc_saml_verify_response hataları kararlı bir kod taşır:

Kod Anlamı
signature eksik/güvenilmeyen/kurcalanmış imza ya da izin verilmeyen algoritma/dönüşüm
expired NotBefore/NotOnOrAfter dışında (kaymanın ötesinde)
audience audience kısıtlaması bizi adlandırmıyor
destination yanıt destination’ı bizim ACS’imiz değil
request_match InResponseTo bekleyen bir istekle eşleşmiyor ya da izin verilmediği hâlde istem dışı
issuer issuer yapılandırılmış IdP değil
recipient subject doğrulama alıcısı bizim ACS’imiz değil
malformed XML/şema düzeyinde hata
status IdP’nin bildirdiği durum Success değildi
invalid / internal diğer her şey / seam hatası
  • sso_connections (global.db) — tür başına bir satır, TASARIM GEREĞİ ÇALIŞMA ALANLARI ARASI.
  • users.sso_subject + users.sso_issuer — sağlayıcı subject sabitlemesi, kısmi bir dizin aracılığıyla (issuer, subject) başına benzersiz.
  • users.deactivated_at — SCIM devre dışı bırakma damgası.
  • SCIM bearer token’ı ve OIDC client secret’ı 0600 izinli secrets dosyasında yaşar, asla veritabanında değil.