Ga naar inhoud

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).

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

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).

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

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

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
  • 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.