Referentie voor de SSO-configuratie
Alles wat instelbaar is aan eenmalige aanmelding, op één plek. De waarden
staan in de rijen van sso_connections in global.db (bewust serverbreed) en
bewerk je via Instellingen → Server → Single sign-on of de
sso.*-RPC-bewerkingen. De opgeslagen rij is de enige bron van waarheid — er
is geen omgevingspad met CC_SAML_* / CC_OIDC_* (een verbinding die uit
twee plekken kan komen, is er een waar het instellingenscherm het mee oneens
kan zijn).
Velden van een verbinding
Sectie getiteld “Velden van een verbinding”| Veld | Geldt voor | Standaard | Betekenis |
|---|---|---|---|
enabled |
beide | uit | aanmeldingen mogen deze verbinding gebruiken |
idpMetadataXml |
SAML | — | de EntityDescriptor-XML van de IdP (vereist om in te schakelen) |
spEntityId |
SAML | <origin>/saml |
ons entiteits-id, vastgepind wanneer de origin varieert |
emailAttribute |
SAML | email |
attribuut met het e-mailadres; een NameID in e-mailvorm is de terugval |
displayNameAttribute |
SAML | displayName |
attribuut voor de weergavenaam |
groupsAttribute |
SAML | groups |
attribuut voor groepsnamen |
clockSkewSeconds |
SAML | 90 | toegestane klokafwijking bij de levensduurvalidatie |
allowIdpInitiated |
SAML | uit | accepteer ongevraagde Responses (geen InResponseTo) |
wantResponseSigned |
SAML | uit | eist een handtekening op de Response-root (assertion-handtekeningen zijn altijd vereist) |
issuer |
OIDC | — | basis-URL van de issuer (vereist om in te schakelen) |
clientId |
OIDC | — | id van de public client (vereist om in te schakelen) |
clientSecret |
OIDC | — | alleen voor vertrouwelijke clients; opgeslagen in het secrets-bestand met modus 0600, nooit in de database — alleen te schrijven via RPC (sso.getConfig rapporteert clientSecretPresent) |
groupsClaim |
OIDC | groups |
claim met groepsnamen |
defaultRole |
beide | member |
rol wanneer geen enkele groep overeenkomt — nooit owner |
groupRoleMap |
beide | {} |
groep → rol; toewijzingen aan owner worden bij het opslaan geweigerd |
autoMember |
beide | aan | voegt gebruikers bij de eerste aanmelding automatisch toe aan elke werkruimte |
allowJit |
beide | aan | provisioneert onbekende gebruikers bij het aanmelden |
Procesconfiguratie
Sectie getiteld “Procesconfiguratie”SSO-verbindingen worden niet vanuit de omgeving gevuld. Eén resterende procesflag gaat over de browseroverdracht, niet over de verbindingsrij:
| Variabele / flag | Betekenis |
|---|---|
--web-client-url / CC_SERVER_WEB_CLIENT_URL |
de origin waarheen SSO-callbacks de browser terugsturen (het inloggegeven reist mee in het URL-fragment). Is hij niet ingesteld, dan blijft de overdracht op dezelfde origin. |
De issuer-URL zelf moet https zijn (http wordt alleen geaccepteerd voor
loopback-issuers localhost, 127.0.0.1 en ::1).
HTTP-endpoints
Sectie getiteld “HTTP-endpoints”| Endpoint | Auth | Doel |
|---|---|---|
GET /saml/login?relay=… |
geen (redirect) | start een door de SP geïnitieerde aanmelding; relay=desktop draagt over aan de app, relay=web-popup stuurt een postMessage naar het wachtende verbindingstabblad (dat zijn client_origin opgeeft, wat alleen wordt gehonoreerd wanneer de lijst met toegestane origins die vertrouwt) |
POST /saml/acs |
geen (IdP-POST) | de assertion consumer — verifieert, provisioneert en maakt het inloggegeven aan |
GET /saml/metadata |
geen | onze SP-EntityDescriptor |
GET /oidc/login?relay=… / GET /oidc/callback |
geen | de OIDC-roundtrip; relay=desktop draagt over aan de app, relay=web-popup aan het wachtende verbindingstabblad (dezelfde client_origin-conventie) |
GET /auth/providers |
geen, CORS * |
de probe van het verbindingsscherm: aangeboden SSO-verbindingen (id/kind/label) + pairingEnabled |
/scim/v2/Users… |
Bearer (SCIM-token) | Users: aanmaken, ophalen, list+filter, PUT, PATCH en DELETE |
/scim/v2/Groups |
Bearer | alleen-lezen; een groep-push antwoordt bewust met 501 |
/scim/v2/ServiceProviderConfig |
Bearer | capaciteitsdocument |
RPC-bewerkingen
Sectie getiteld “RPC-bewerkingen”Alle sso.*-bewerkingen zijn servergebonden en voorbehouden aan de
servereigenaar (de beheerder van de installatie,
ServerAuthority.serverOwner). Eigenaar van een werkruimte zijn is niet
genoeg; koppelen alleen verleent ze nooit.
| Bewerking | Doel |
|---|---|
sso.getConfig |
de opgeslagen verbinding voor een soort |
sso.saveConfig |
valideren, opslaan en direct toepassen |
sso.status |
de flags enabled/configured, of er een SCIM-token is, en de canonieke origin |
sso.testConnection |
test een verbinding zonder de browserroundtrip (SAML: metadata parsen + AuthnRequest opbouwen; OIDC: issuer-detectie), met optionele, nog niet opgeslagen waarden van het scherm |
sso.spMetadata |
levert de SP-EntityDescriptor voor een origin op |
sso.setPairingEnabled |
handmatig koppelen toestaan of verbieden (uitnodigingscodes, koppelingssleutels); weigeren om het uit te schakelen zolang er geen werkende SSO-verbinding is, beschermt tegen buitensluiting |
sso.sessionPolicy |
leest de maximale leeftijd van apparaatinloggegevens en de time-out bij inactiviteit van de installatie (in minuten; 0 = niet ingesteld) |
sso.setSessionPolicy |
stelt die grenzen in; ze worden gehandhaafd bij de apparaatcontrole en niet aan clients bekendgemaakt |
sso.scimRegenerateToken |
genereert het SCIM-bearer-token en geeft het één keer terug |
Validatiefoutcodes
Sectie getiteld “Validatiefoutcodes”Fouten van cc_saml_verify_response dragen een stabiele code:
| Code | Betekenis |
|---|---|
signature |
ontbrekende, niet-vertrouwde of gemanipuleerde handtekening, of een niet-toegestaan algoritme of transform |
expired |
buiten NotBefore/NotOnOrAfter (voorbij de klokafwijking) |
audience |
de audience-restrictie vermeldt ons niet |
destination |
de destination van de respons is niet onze ACS |
request_match |
InResponseTo komt niet overeen met een openstaand verzoek, of ongevraagd terwijl dat niet is toegestaan |
issuer |
de issuer is niet de geconfigureerde IdP |
recipient |
de recipient van de subjectbevestiging is niet onze ACS |
malformed |
fout op XML-/schemaniveau |
status |
de door de IdP gerapporteerde status was niet Success |
invalid / internal |
alle andere gevallen / seam-fout |
Databaseoppervlakken
Sectie getiteld “Databaseoppervlakken”sso_connections(global.db) — één rij per soort, BEWUST WERKRUIMTEOVERSCHRIJDEND.users.sso_subject+users.sso_issuer— de vastzetting van het providersubject, uniek per(issuer, subject)via een partiële index.users.deactivated_at— de SCIM-deactiveringsstempel.- Het SCIM-bearer-token en het clientsecret van OIDC staan in het secrets-bestand met modus 0600, nooit in de database.