Attention, le module SAML de l'extension de sécurité Java EE est incompatible avec Rampart (module de sécurisation des services Web d'Axis2). Rampart se base sur une version obsolète de la librairie OpenSAML qui n'est pas compatible.
Rampart n'est désormais plus installé par défaut avec Adélia Studio. Il est toutefois possible de faire cohabiter Rampart et l'extension de sécurité en mode OpenID. Pour cela, vous devez exclure dans vos scripts de build la dépendance SAML de l'extension de sécurité (org.pac4j:pac4j-saml), et forcer explicitement la dépendance rampart (org.apache.rampart:rampart-core).
L'extension de sécurité Java EE est compatible avec le module d'extension SAMLV2 de Pac4J. Vous devez l'inclure explicitement dans vos scripts de build (pac4j-saml).
runtime (group:'org.pac4j',name:'pac4j-saml',version:'3.9.0' ) { exclude group: 'org.opensaml', module: 'opensaml-core' exclude group: 'org.opensaml', module: 'opensaml-xmlsec-impl' exclude group: 'org.opensaml', module: 'opensaml-security-impl' exclude group: 'org.opensaml', module: 'opensaml-saml-impl' }
La configuration prend la forme suivante :
wagonSecurity: callbackUrl: https://domain.com/application/callback corsAuthorizer: allowedOrigins: "*" allowedMethods: GET,POST,HEAD,OPTIONS,PUT,DELETE # allowedHeaders: Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization # preflightMaxage: 1800 authorizationGenerator: className: com.hardis.adelia.jee.security.RoleGenerator rolesClaim: Role userNameClaim: surname clientsProperties: saml.serviceProviderEntityId: clientId saml.keystorePath: conf:saml-keystore.jks saml.keystorePassword: secret saml.privateKeyPassword: secret saml.identityProviderMetadataPath: conf:saml-keycloak.xml #saml.identityProviderMetadataPath: java:comp/env/url/samlDescriptor saml.maximumAuthenticationLifetime: 3600
Pour simplifier la configuration des ressources fichier (keystore, fichier de métadonnées du fournisseur d'identité), les extensions suivantes ont été définies sur le chargement des valeurs de la section clientProperties :
- Si la valeur est un nom de fichier simple préfixé par le marqueur "conf:", le fichier sera recherché dans le répertoire standard de configuration de l'application (WEB-INF/conf).
- Si la valeur représente une ressource JNDI au format "java:comp/env/url/<nomResource>", la valeur sera remplacée par une résolution JNDI.
A noter que dans le cas d'une authentification SAML, il n'y a pas de notion d'expiration de token. L'authentification restera valide au moins jusqu'à l'expiration de la session JEE.
Le générateur de rôles par défaut (com.hardis.adelia.jee.security.RoleGenerator) est compatible avec les profils SAML. Les paramètres userNameClaim et rolesClaim sont supportés.
Le fichier exemple ci-dessus définit une configuration minimale de l'extension de sécurité pour une authentification SAMLV2.
- saml.serviceProviderEntityId est l'identifiant de votre application enregistré auprès de votre fournisseur. Il vous est fourni par le fournisseur d'identité.
- saml.keystorePath indique le keystore à utiliser pour la communication avec le serveur d'identité (optionnel). Pac4j peut générer une clé automatiquement.
- saml.keystorePassword est le mot de passe du keystore.
- saml.keystoreAlias est l'alias de la clé privée s'il en existe plus d'une.
- saml.privateKeyPassword est le mot de passe de la clé privée.
- saml.identityProviderMetadataPath est le chemin d'accès au fichier de description du provider d'identité.
- saml.maximumAuthenticationLifetime est la durée de vie de l'assertion SAML acceptée par Pac4J avant de redéclencher explicitement une authentification.
Référez-vous à la documentation en ligne des paramètres de la "PropertiesConfigFactory" http://www.pac4j.org/3.9.x/docs/config.html pour les autres paramètres acceptés.