Référence de configuration SSO
Tout ce qui est configurable au sujet de l’ouverture de session unique, au même
endroit. Les valeurs résident dans les lignes sso_connections de global.db
(à l’échelle du serveur par conception) et se modifient par
Paramètres → Serveur → Authentification unique ou par les opérations RPC
sso.*. La ligne enregistrée est la seule source de vérité — il n’existe aucun
chemin par variable d’environnement CC_SAML_* / CC_OIDC_* (une connexion
susceptible d’arriver de deux endroits est une connexion avec laquelle l’écran
des paramètres peut être en désaccord).
Champs de connexion
Section intitulée “Champs de connexion”| Champ | S’applique à | Valeur par défaut | Signification |
|---|---|---|---|
enabled |
les deux | désactivé | les ouvertures de session peuvent utiliser cette connexion |
idpMetadataXml |
SAML | — | le XML EntityDescriptor de l’IdP (requis pour l’activer) |
spEntityId |
SAML | <origin>/saml |
notre identifiant d’entité, épinglé lorsque l’origine varie |
emailAttribute |
SAML | email |
attribut qui porte le courriel ; un NameID en forme de courriel sert de solution de repli |
displayNameAttribute |
SAML | displayName |
attribut du nom d’affichage |
groupsAttribute |
SAML | groups |
attribut des noms de groupes |
clockSkewSeconds |
SAML | 90 | tolérance de décalage pour la validation de la durée de vie |
allowIdpInitiated |
SAML | désactivé | accepter les Response non sollicitées (sans InResponseTo) |
wantResponseSigned |
SAML | désactivé | exiger une signature à la racine de l’élément Response (les signatures d’assertion sont toujours exigées) |
issuer |
OIDC | — | URL de base de l’émetteur (requise pour l’activer) |
clientId |
OIDC | — | identifiant de client public (requis pour l’activer) |
clientSecret |
OIDC | — | clients confidentiels seulement ; conservé dans le fichier de secrets en 0600, jamais dans la base de données — en écriture seule par RPC (sso.getConfig rapporte clientSecretPresent) |
groupsClaim |
OIDC | groups |
revendication qui porte les noms de groupes |
defaultRole |
les deux | member |
rôle lorsqu’aucun groupe ne correspond — jamais owner |
groupRoleMap |
les deux | {} |
groupe → rôle ; les correspondances vers le rôle owner sont refusées à l’enregistrement |
autoMember |
les deux | activé | ajouter automatiquement les utilisateurs à chaque espace de travail à la première connexion |
allowJit |
les deux | activé | provisionner les utilisateurs inconnus à la connexion |
Configuration du processus
Section intitulée “Configuration du processus”Les connexions SSO ne sont pas amorcées à partir de l’environnement. Il reste un paramètre du processus qui concerne la transmission au navigateur, et non la ligne de connexion :
| Variable / option | Signification |
|---|---|
--web-client-url / CC_SERVER_WEB_CLIENT_URL |
origine vers laquelle les rappels d’ouverture de session unique font rebondir le navigateur (l’identifiant voyage dans le fragment de l’URL). Non définie, la transmission reste de même origine. |
L’URL de l’émetteur elle-même doit être https (http n’est accepté que pour
les émetteurs de bouclage localhost, 127.0.0.1 et ::1).
Points de terminaison HTTP
Section intitulée “Points de terminaison HTTP”| Point de terminaison | Authentification | Objet |
|---|---|---|
GET /saml/login?relay=… |
aucune (redirection) | démarrer une ouverture de session amorcée par le SP ; relay=desktop transmet la main à l’application, relay=web-popup envoie un postMessage à l’onglet de connexion en attente (qui déclare son client_origin, pris en compte seulement lorsque la liste d’origines autorisées lui fait confiance) |
POST /saml/acs |
aucune (POST de l’IdP) | le consommateur d’assertions — vérifie, provisionne, émet |
GET /saml/metadata |
aucune | notre EntityDescriptor de SP |
GET /oidc/login?relay=… / GET /oidc/callback |
aucune | l’aller-retour OIDC ; relay=desktop transmet la main à l’application, relay=web-popup à l’onglet de connexion en attente (même convention client_origin) |
GET /auth/providers |
aucune, CORS * |
la sonde de l’écran de connexion : les connexions SSO proposées (id/kind/label) + pairingEnabled |
/scim/v2/Users… |
Bearer (jeton SCIM) | Users : création, lecture, liste et filtre, PUT, PATCH, DELETE |
/scim/v2/Groups |
Bearer | en lecture seule ; la poussée de groupes répond 501 par conception |
/scim/v2/ServiceProviderConfig |
Bearer | document de capacités |
Opérations RPC
Section intitulée “Opérations RPC”Toutes les opérations sso.* ont la portée du serveur et sont réservées au
propriétaire du serveur (l’exploitant de l’installation,
ServerAuthority.serverOwner). Être propriétaire d’un espace de travail ne
suffit pas ; l’appairage seul ne les accorde jamais.
| Opération | Objet |
|---|---|
sso.getConfig |
la connexion enregistrée pour un type donné |
sso.saveConfig |
valider, persister et appliquer à chaud |
sso.status |
indicateurs activé/configuré, présence du jeton SCIM, origine canonique |
sso.testConnection |
tester une connexion sans passer par l’aller-retour dans le navigateur (SAML : analyse des métadonnées + construction de l’AuthnRequest ; OIDC : découverte de l’émetteur), avec des valeurs à l’écran non enregistrées en option |
sso.spMetadata |
émettre l’EntityDescriptor de SP pour une origine |
sso.setPairingEnabled |
autoriser ou interdire l’appairage manuel (codes d’invitation, clés d’appairage) ; refuser de le désactiver tant qu’aucune connexion SSO fonctionnelle n’existe protège contre la perte d’accès au serveur |
sso.sessionPolicy |
lire l’âge maximal des identifiants d’appareil de l’installation et le délai d’inactivité (en minutes ; 0 = non défini) |
sso.setSessionPolicy |
définir ces limites ; appliquées à la vérification de l’appareil, sans être communiquées aux clients |
sso.scimRegenerateToken |
générer et retourner le jeton porteur SCIM (une seule fois) |
Codes d’erreur de validation
Section intitulée “Codes d’erreur de validation”Les échecs de cc_saml_verify_response portent un code stable :
| Code | Signification |
|---|---|
signature |
signature absente, non approuvée ou falsifiée, ou algorithme/transformation non autorisé |
expired |
hors de NotBefore/NotOnOrAfter (au-delà du décalage) |
audience |
la restriction d’audience ne nous désigne pas |
destination |
la destination de la réponse n’est pas notre ACS |
request_match |
InResponseTo ne correspond à aucune requête en attente, ou réponse non sollicitée alors qu’elle est interdite |
issuer |
l’émetteur n’est pas l’IdP configuré |
recipient |
le destinataire de la confirmation du sujet n’est pas notre ACS |
malformed |
échec au niveau XML/schéma |
status |
le statut rapporté par l’IdP n’était pas Success |
invalid / internal |
tout le reste / défaillance de jointure |
Surfaces de base de données
Section intitulée “Surfaces de base de données”sso_connections(global.db) — une ligne par type, PARTAGÉ ENTRE TOUS LES ESPACES DE TRAVAIL PAR CONCEPTION.users.sso_subject+users.sso_issuer— l’épinglage du sujet du fournisseur, unique par(issuer, subject)grâce à un index partiel.users.deactivated_at— l’estampille de désactivation SCIM.- Le jeton porteur SCIM et le secret client OIDC résident dans le fichier de secrets en 0600, jamais dans la base de données.