Přeskočit na obsah

Konfigurace SSO

Všechno, co jde u jednotného přihlášení nastavit, na jednom místě. Hodnoty žijí v řádcích sso_connections v global.db (schválně pro celý server) a upravují se v Nastavení → Server → Jednotné přihlášení nebo přes RPC operace sso.*. Uložený řádek je jediný zdroj pravdy — cesta přes prostředí CC_SAML_* / CC_OIDC_* neexistuje (připojení, které by mohlo přijít ze dvou míst, je připojení, se kterým se obrazovka nastavení může rozejít).

Pole Platí pro Výchozí Význam
enabled obojí vypnuto přihlášení smí tohle připojení použít
idpMetadataXml SAML — XML EntityDescriptor IdP (nutné k zapnutí)
spEntityId SAML <origin>/saml naše entity ID, připnuté, když se origin mění
emailAttribute SAML email atribut s e-mailem; záloha je NameID ve tvaru e-mailu
displayNameAttribute SAML displayName atribut zobrazovaného jména
groupsAttribute SAML groups atribut s názvy skupin
clockSkewSeconds SAML 90 povolená odchylka při kontrole životnosti
allowIdpInitiated SAML vypnuto přijímat nevyžádané odpovědi Response (bez InResponseTo)
wantResponseSigned SAML vypnuto vyžadovat podpis kořene Response (podpisy assertion jsou vždy povinné)
issuer OIDC — základní URL vydavatele (nutná k zapnutí)
clientId OIDC — id veřejného klienta (nutné k zapnutí)
clientSecret OIDC — jen důvěrní klienti; uloženo v souboru secrets s oprávněním 0600, nikdy v databázi — přes RPC jen pro zápis (sso.getConfig hlásí clientSecretPresent)
groupsClaim OIDC groups claim s názvy skupin
defaultRole obojí member role, když se žádná skupina nenamapuje — nikdy owner
groupRoleMap obojí {} skupina → role; mapování na vlastníka se při uložení odmítne
autoMember obojí zapnuto při prvním přihlášení uživatele automaticky přidat do každého pracovního prostoru
allowJit obojí zapnuto neznámé uživatele založit při přihlášení

Připojení SSO se z prostředí nezakládají. Jediný zbývající přepínač procesu se týká předání prohlížeči, ne řádku připojení:

Proměnná / přepínač Význam
--web-client-url / CC_SERVER_WEB_CLIENT_URL origin, na který callbacky SSO odrazí prohlížeč (přihlašovací údaj jede ve fragmentu URL). Když není nastaveno, předání zůstane na stejném originu.

Samotná URL vydavatele musí být https (http se bere jen u vydavatelů na loopback localhost, 127.0.0.1 a ::1).

Endpoint Ověření Účel
GET /saml/login?relay=… žádné (přesměrování) spustí přihlášení iniciované SP; relay=desktop předá aplikaci, relay=web-popup pošle postMessage čekající kartě připojení (ta ohlásí svůj client_origin, který platí jen když mu seznam povolených originů důvěřuje)
POST /saml/acs žádné (POST od IdP) spotřebitel assertion — ověří, provisionuje, vystaví
GET /saml/metadata žádné náš SP EntityDescriptor
GET /oidc/login?relay=… / GET /oidc/callback žádné cesta OIDC tam a zpět; relay=desktop předá aplikaci, relay=web-popup čekající kartě připojení (stejná konvence client_origin)
GET /auth/providers žádné, CORS * sonda obrazovky připojení: nabízená připojení SSO (id/kind/label) + pairingEnabled
/scim/v2/Users… Bearer (token SCIM) Users: vytvoření/načtení/výpis+filtr/PUT/PATCH/DELETE
/scim/v2/Groups Bearer jen pro čtení; push skupin vrací 501 schválně
/scim/v2/ServiceProviderConfig Bearer dokument schopností

Všechny operace sso.* mají rozsah serveru a jsou omezené na vlastníka serveru (operátora instalace, ServerAuthority.serverOwner). Vlastnit pracovní prostor nestačí; samotné párování je nikdy neudělí.

Operace Účel
sso.getConfig uložené připojení daného druhu
sso.saveConfig ověřit, uložit a hned uplatnit
sso.status příznaky zapnuto/nakonfigurováno, přítomnost tokenu SCIM, kanonický origin
sso.testConnection otestovat připojení bez cesty prohlížeče tam a zpět (SAML: rozbor metadat + sestavení AuthnRequest; OIDC: discovery vydavatele), volitelně s neuloženými hodnotami z obrazovky
sso.spMetadata vypsat SP EntityDescriptor pro origin
sso.setPairingEnabled povolit nebo zakázat ruční párování (kódy pozvánek, párovací klíče); odmítnutí vypnout ho, dokud neexistuje funkční připojení SSO, chrání před uzamčením
sso.sessionPolicy přečíst maximální stáří přihlašovacího údaje zařízení a timeout nečinnosti instalace (minuty; 0 = nenastaveno)
sso.setSessionPolicy nastavit tyhle meze; vynucují se při kontrole zařízení, klientům se neinzerují
sso.scimRegenerateToken vygenerovat a vrátit bearer token SCIM (jednou)

Selhání cc_saml_verify_response nesou stabilní kód:

Kód Význam
signature chybějící, nedůvěryhodný nebo pozměněný podpis, nebo nepovolený algoritmus či transformace
expired mimo NotBefore/NotOnOrAfter (za odchylkou)
audience omezení audience nás nejmenuje
destination cíl odpovědi není naše ACS
request_match InResponseTo nesedí s čekajícím požadavkem, nebo je odpověď nevyžádaná, když je to zakázané
issuer vydavatel není nakonfigurovaný IdP
recipient příjemce potvrzení subjektu není naše ACS
malformed selhání na úrovni XML nebo schématu
status stav nahlášený IdP nebyl Success
invalid / internal cokoli jiného / selhání švu
  • sso_connections (global.db) — jeden řádek na druh, CROSS-WORKSPACE BY DESIGN.
  • users.sso_subject + users.sso_issuer — připnutí subjektu poskytovatele, jedinečné pro (issuer, subject) přes částečný index.
  • users.deactivated_at — razítko deaktivace přes SCIM.
  • Bearer token SCIM a client secret OIDC žijí v souboru secrets s oprávněním 0600, nikdy v databázi.