Référence de configuration SSO
Tout ce qui se configure dans l’authentification unique, au même endroit. Les
valeurs résident dans les lignes sso_connections de global.db (à l’échelle du
serveur par conception), modifiées via Paramètres → Serveur → Authentification
unique ou les opérations RPC sso.*. La ligne enregistrée est l’unique 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 utilisateurs peuvent se connecter via cette connexion |
idpMetadataXml |
SAML | — | le XML EntityDescriptor de l’IdP (requis pour l’activer) |
spEntityId |
SAML | <origin>/saml |
notre ID d’entité, épinglé lorsque l’origine varie |
emailAttribute |
SAML | email |
attribut portant l’adresse e-mail ; un NameID en forme d’adresse e-mail sert 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 des durées de vie |
allowIdpInitiated |
SAML | désactivé | accepter les réponses non sollicitées (sans InResponseTo) |
wantResponseSigned |
SAML | désactivé | exiger une signature sur l’élément racine Response (les signatures d’assertion sont toujours exigées) |
issuer |
OIDC | — | URL de base de l’émetteur (requise pour l’activer) |
clientId |
OIDC | — | ID du client public (requis pour l’activer) |
clientSecret |
OIDC | — | clients confidentiels uniquement ; stocké dans le fichier de secrets en 0600, jamais dans la base de données — en écriture seule via RPC (sso.getConfig indique clientSecretPresent) |
groupsClaim |
OIDC | groups |
claim portant les noms de groupes |
defaultRole |
les deux | member |
rôle attribué lorsqu’aucun groupe ne correspond — jamais owner |
groupRoleMap |
les deux | {} |
groupe → rôle ; les correspondances vers le rôle propriétaire sont refusées à l’enregistrement |
autoMember |
les deux | activé | ajouter automatiquement les utilisateurs à tous les espaces 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 initialisées depuis l’environnement. Il reste une option de processus, qui concerne le transfert au navigateur, et non la ligne de connexion :
| Variable / option | Signification |
|---|---|
--web-client-url / CC_SERVER_WEB_CLIENT_URL |
origine vers laquelle les rappels SSO renvoient le navigateur (l’identifiant de connexion voyage dans le fragment de l’URL). Non définie, le transfert reste sur la même origine. |
L’URL de l’émetteur elle-même doit être en https (http n’est accepté que
pour les émetteurs en 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 connexion initiée par le SP ; relay=desktop transfère vers l’application, relay=web-popup envoie un postMessage à l’onglet de connexion en attente (qui déclare son client_origin, honoré uniquement lorsque la liste d’origines autorisées lui fait confiance) |
POST /saml/acs |
aucune (POST de l’IdP) | le service consommateur d’assertions — vérifie, provisionne, génère |
GET /saml/metadata |
aucune | notre EntityDescriptor de SP |
GET /oidc/login?relay=… / GET /oidc/callback |
aucune | l’aller-retour OIDC ; relay=desktop transfère vers l’application, relay=web-popup vers 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 avec 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.* sont à portée serveur et 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 |
sso.saveConfig |
valider, persister et appliquer à chaud |
sso.status |
indicateurs activé/configuré, présence d’un jeton SCIM, origine canonique |
sso.testConnection |
tester une connexion sans l’aller-retour dans le navigateur (SAML : analyse des métadonnées + construction de l’AuthnRequest ; OIDC : découverte de l’émetteur), avec d’éventuelles valeurs saisies à l’écran et non enregistrées |
sso.spMetadata |
émettre l’EntityDescriptor de SP pour une origine |
sso.setPairingEnabled |
autoriser/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 un verrouillage de l’accès |
sso.sessionPolicy |
lire l’âge maximal des identifiants d’appareil et le délai d’inactivité de l’installation (en minutes ; 0 = non défini) |
sso.setSessionPolicy |
définir ces limites ; appliquées lors du contrôle de l’appareil, jamais annoncées aux clients |
sso.scimRegenerateToken |
générer et renvoyer le jeton bearer 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/altérée, ou algorithme/transformation non autorisé |
expired |
en dehors 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 de 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 / échec de la jointure |
Surfaces de base de données
Section intitulée « Surfaces de base de données »sso_connections(global.db) — une ligne par type, COMMUNE À TOUS LES ESPACES DE TRAVAIL PAR CONCEPTION.users.sso_subject+users.sso_issuer— l’épinglage du sujet du fournisseur, unique par(issuer, subject)via un index partiel.users.deactivated_at— l’horodatage de désactivation SCIM.- Le jeton bearer SCIM et le secret client OIDC résident dans le fichier de secrets en 0600, jamais dans la base de données.