Referință pentru configurarea SSO
Tot ce este configurabil la autentificarea unică, într-un singur loc. Valorile stau
în rândurile sso_connections din global.db (la nivel de server prin proiectare),
editate prin Setări → Server → Autentificare unică sau prin operațiile RPC
sso.*. Rândul salvat este singura sursă de adevăr — nu există o cale de mediu
CC_SAML_* / CC_OIDC_* (o conexiune care ar putea veni din două locuri este una
cu care ecranul de setări poate intra în contradicție).
Câmpurile conexiunii
Secțiune intitulată „Câmpurile conexiunii”| Câmp | Se aplică la | Implicit | Semnificație |
|---|---|---|---|
enabled |
ambele | oprit | autentificările pot folosi această conexiune |
idpMetadataXml |
SAML | — | XML-ul EntityDescriptor al IdP-ului (obligatoriu pentru activare) |
spEntityId |
SAML | <origin>/saml |
id-ul nostru de entitate, fixat atunci când originea variază |
emailAttribute |
SAML | email |
atributul care poartă e-mailul; un NameID în formă de e-mail este soluția de rezervă |
displayNameAttribute |
SAML | displayName |
atributul numelui afișat |
groupsAttribute |
SAML | groups |
atributul numelor de grup |
clockSkewSeconds |
SAML | 90 | marja permisă pentru decalajul de ceas la validarea duratei de viață |
allowIdpInitiated |
SAML | oprit | acceptă răspunsuri nesolicitate (fără InResponseTo) |
wantResponseSigned |
SAML | oprit | cere o semnătură la rădăcina răspunsului (semnăturile aserțiunilor sunt mereu obligatorii) |
issuer |
OIDC | — | URL-ul de bază al emitentului (obligatoriu pentru activare) |
clientId |
OIDC | — | id-ul de client public (obligatoriu pentru activare) |
clientSecret |
OIDC | — | doar pentru clienții confidențiali; stocat în fișierul de secrete 0600, niciodată în baza de date — doar în scriere prin RPC (sso.getConfig raportează clientSecretPresent) |
groupsClaim |
OIDC | groups |
revendicarea care poartă numele de grup |
defaultRole |
ambele | member |
rolul atunci când niciun grup nu se mapează — niciodată owner |
groupRoleMap |
ambele | {} |
grup → rol; mapările către proprietar sunt refuzate la salvare |
autoMember |
ambele | pornit | adaugă automat utilizatorii în fiecare spațiu de lucru la prima autentificare |
allowJit |
ambele | pornit | provisionează utilizatorii necunoscuți la autentificare |
Configurarea procesului
Secțiune intitulată „Configurarea procesului”Conexiunile SSO nu se inițializează din mediu. Un singur steag de proces rămas se referă la predarea către browser, nu la rândul conexiunii:
| Variabilă / steag | Semnificație |
|---|---|
--web-client-url / CC_SERVER_WEB_CLIENT_URL |
originea către care redirecționează browserul callback-urile SSO (credențialul călătorește în fragmentul URL-ului). Nesetată, predarea rămâne pe aceeași origine. |
URL-ul emitentului în sine trebuie să fie https (http este acceptat doar pentru
emitenți pe loopback: localhost, 127.0.0.1 și ::1).
Endpoint-uri HTTP
Secțiune intitulată „Endpoint-uri HTTP”| Endpoint | Autentificare | Scop |
|---|---|---|
GET /saml/login?relay=… |
fără (redirecționare) | pornește autentificarea inițiată de SP; relay=desktop predă aplicației, relay=web-popup trimite prin postMessage către tab-ul de conectare în așteptare (care își declară client_origin, onorat doar când lista de permisiuni a originilor îl consideră de încredere) |
POST /saml/acs |
fără (POST de la IdP) | consumatorul de aserțiuni — verifică, provisionează, emite |
GET /saml/metadata |
fără | EntityDescriptor-ul nostru de SP |
GET /oidc/login?relay=… / GET /oidc/callback |
fără | ciclul dus-întors OIDC; relay=desktop predă aplicației, relay=web-popup tab-ului de conectare în așteptare (aceeași convenție client_origin) |
GET /auth/providers |
fără, CORS * |
sonda ecranului de conectare: conexiunile SSO oferite (id/kind/label) + pairingEnabled |
/scim/v2/Users… |
Bearer (token SCIM) | Users: creare/obținere/listare+filtrare/PUT/PATCH/DELETE |
/scim/v2/Groups |
Bearer | doar citire; push-ul de grupuri răspunde 501 prin proiectare |
/scim/v2/ServiceProviderConfig |
Bearer | documentul de capabilități |
Operații RPC
Secțiune intitulată „Operații RPC”Toate operațiile sso.* sunt la nivel de server și sunt restricționate la
proprietarul serverului (operatorul instalării,
ServerAuthority.serverOwner). Deținerea unui spațiu de lucru nu este suficientă;
nici asocierea singură nu le acordă vreodată.
| Operație | Scop |
|---|---|
sso.getConfig |
conexiunea salvată pentru un tip |
sso.saveConfig |
validează, persistă și aplică în direct |
sso.status |
steaguri de activare/configurare, prezența tokenului SCIM, originea canonică |
sso.testConnection |
testează o conexiune fără ciclul dus-întors din browser (SAML: parsarea metadatelor + construirea AuthnRequest; OIDC: descoperirea emitentului), cu valori opționale nesalvate de pe ecran |
sso.spMetadata |
emite EntityDescriptor-ul de SP pentru o origine |
sso.setPairingEnabled |
permite/interzice asocierea manuală (coduri de invitație, chei de asociere); refuzul de a o dezactiva cât timp nu există nicio conexiune SSO funcțională protejează împotriva blocării accesului |
sso.sessionPolicy |
citește durata maximă de viață și timeout-ul de inactivitate ale credențialului de dispozitiv al instalării (minute; 0 = nesetat) |
sso.setSessionPolicy |
setează acele limite; aplicate la verificarea dispozitivului, nu anunțate clienților |
sso.scimRegenerateToken |
generează + returnează bearer tokenul SCIM (o singură dată) |
Coduri de eroare la validare
Secțiune intitulată „Coduri de eroare la validare”Eșecurile cc_saml_verify_response poartă un cod stabil:
| Cod | Semnificație |
|---|---|
signature |
semnătură lipsă/neacceptată/manipulată sau un algoritm/transformare nepermis(ă) |
expired |
în afara NotBefore/NotOnOrAfter (dincolo de marja de decalaj) |
audience |
restricția de audiență nu ne numește |
destination |
destinația răspunsului nu este ACS-ul nostru |
request_match |
InResponseTo nu corespunde unei cereri în așteptare sau este nesolicitat cât timp acest lucru este interzis |
issuer |
emitentul nu este IdP-ul configurat |
recipient |
destinatarul confirmării subiectului nu este ACS-ul nostru |
malformed |
eșec la nivel de XML/schemă |
status |
starea raportată de IdP nu a fost Success |
invalid / internal |
orice altceva / eșec al cusăturii |
Suprafețe de bază de date
Secțiune intitulată „Suprafețe de bază de date”sso_connections(global.db) — un rând pentru fiecare tip, ÎNTRE SPAȚII DE LUCRU PRIN PROIECTARE.users.sso_subject+users.sso_issuer— fixarea subiectului furnizorului, unică per(issuer, subject)printr-un index parțial.users.deactivated_at— marcajul de dezactivare SCIM.- Bearer tokenul SCIM și client secretul OIDC stau în fișierul de secrete 0600, niciodată în baza de date.