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 připojení
Sekce “Pole připojení”| 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í |
Konfigurace procesu
Sekce “Konfigurace procesu”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).
HTTP endpointy
Sekce “HTTP endpointy”| 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í |
RPC operace
Sekce “RPC operace”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) |
Kódy chyb validace
Sekce “Kódy chyb validace”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 |
Databázové plochy
Sekce “Databázové plochy”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.