Aller au contenu

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

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

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

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

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)

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