Authentification SAML¶
Intégration de Guacamole avec un fournisseur d'identité SAML 2.0 (Azure AD, Okta, Keycloak, etc.) pour une authentification centralisee.
Concepts SAML¶
SAML 2.0 est un protocole de fédération d'identité basé sur des assertions XML signees. Guacamole joue le rôle de Service Provider (SP) et delègue l'authentification a un Identity Provider (IdP).
sequenceDiagram
actor Utilisateur
participant Guacamole as Guacamole (SP)
participant IdP
Utilisateur->>Guacamole: Acces a l'application
Guacamole->>Utilisateur: Redirect vers IdP (AuthnRequest)
Utilisateur->>IdP: Authentification (login/MFA)
IdP->>Utilisateur: Assertion SAML signee (redirect)
Utilisateur->>Guacamole: POST assertion (ACS URL)
Guacamole->>Guacamole: Verification signature + extraction attributs
Guacamole->>Utilisateur: Session ouverte Terminologie¶
| Terme | Définition |
|---|---|
| SP (Service Provider) | L'application qui consomme l'identité — ici Guacamole |
| IdP (Identity Provider) | Le fournisseur d'identité — Azure AD, Okta, Keycloak... |
| Metadata | Fichier XML décrivant le SP ou l'IdP (certificats, URLs) |
| Assertion | Réponse XML signee par l'IdP contenant les attributs utilisateur |
| Entity ID | Identifiant unique du SP, sous forme d'URL |
| ACS URL | Assertion Consumer Service URL — endpoint Guacamole recevant l'assertion |
Configuration guacamole.properties¶
Editez /etc/guacamole/guacamole.properties sur la VM (ou mettez à jour le template Ansible pour le prochain build) :
# SAML Identity Provider
saml-idp-metadata-url: https://login.microsoftonline.com/TENANT_ID/federationmetadata/2007-06/federationmetadata.xml
saml-idp-url: https://login.microsoftonline.com/TENANT_ID/saml2
# Service Provider
saml-entity-id: https://guacamole.exemple.com/guacamole
saml-callback-url: https://guacamole.exemple.com/guacamole
# Attribut de groupe (optionnel)
saml-group-attribute: groups
Configuration IdP
L'URL de metadata (saml-idp-metadata-url) est spécifique à chaque IdP :
- Azure AD :
https://login.microsoftonline.com/{TENANT_ID}/federationmetadata/2007-06/federationmetadata.xml - Okta :
https://{DOMAIN}.okta.com/app/{APP_ID}/sso/saml/metadata - Keycloak :
https://{HOST}/realms/{REALM}/protocol/saml/descriptor
Guacamole téléchargé ce fichier au démarrage de Tomcat. L'URL doit être accessible depuis la VM Guacamole.
Après modification, redemarrez Tomcat :
Informations a fournir à l'IdP¶
L'administrateur de l'IdP a besoin de ces informations pour créer l'application SAML :
| Information | Valeur |
|---|---|
| Entity ID / Identifier | https://guacamole.exemple.com/guacamole |
| ACS URL / Reply URL | https://guacamole.exemple.com/guacamole |
| Name ID Format | urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified |
| Attribut attendu : username | Doit correspondre au login Guacamole |
| Attribut attendu : groups | Noms des groupes Guacamole (optionnel) |
Le Name ID transmis par l'IdP devient le nom d'utilisateur dans Guacamole.
Fallback admin local¶
Si l'IdP est indisponible ou mal configuré, l'accès à l'interface de login local est possible via :
Cette URL contourne SAML et affiche le formulaire de login standard. Utile pour l'administration en cas de problème avec l'IdP.
Auto-création des comptes¶
Lorsqu'un utilisateur s'authentifie via SAML pour la première fois, Guacamole peut créer automatiquement son compte dans PostgreSQL :
Ce parametre est déjà present dans le template Ansible du chapitre précédent. Le compte est créé sans connexions assignees : l'administrateur doit ensuite lui attribuer des accès.
Priorité des providers
Guacamole charge les extensions JAR par ordre alphabetique du nom de fichier. Si plusieurs extensions d'authentification sont presentes, l'ordre de chargement déterminé la priorité.
Pour forcer SAML en premier, renommez les fichiers JAR avec un préfixe numérique (01-guacamole-auth-sso-saml-...jar) ou assurez-vous que l'ordre alphabetique naturel correspond à la priorité souhaitee.
Dans la configuration de ce tutoriel, JDBC et SAML coexistent : SAML gère l'authentification, JDBC stocke les connexions et les permissions.
Tests SAML¶
Étape 1 : vérifier la metadata SP¶
Guacamole expose sa propre metadata a :
Verifiez que l'EntityID et l'ACS URL correspondent à ce que vous avez configuré.
Étape 2 : tester le flux¶
- Ouvrez
https://guacamole.exemple.com/guacamole/dans un navigateur prive - Vous devez être redirige vers la page de login de l'IdP
- Authentifiez-vous avec un compte IdP valide
- Vous devez être redirige vers Guacamole avec une session ouverte
Étape 3 : vérifier les logs¶
Les erreurs courantes sont des problèmes de signature (certificat IdP obsolète) ou d'URL de callback incorrecte.
HTTPS recommande en production
SAML signe les assertions XML mais ne les chiffre pas systematiquement. En HTTP, les assertions transitent en clair et peuvent être rejouees (replay attack). En production, Guacamole doit imperativement être expose en HTTPS via un reverse proxy (nginx, Caddy, Cloud Load Balancer).
L'IdP refuse souvent d'envoyer des assertions vers des URLs HTTP non securisees.