plus d'infos ?)qui est utilisé, du nom de xdb. Elle possède une table UTILISATEUR, avec deux champs, LOGIN et GROUPE. En ce qui concerne l'annuaire, la seule chose importante à savoir pour ce qui suit est que les utilisateurs se trouvent dans la branche ou=persons,dc=stellarsport,dc=com, et qu'ils sont définis par un uid (leur identifiant) et un userPassword (leur mot de passe).
Configuration de la DataSource
Puisque Jboss doit avoir accès à la base de données, les développeurs d'IonoSport ont vérifié qu'une datasource y était bien configurée. Pour ce faire, ils ont vérifié qu'il existait bien un fichier hsqlIonoSport-ds.xml dans le répertoire deploy du serveur, avec le contenu suivant :
<?xml version="1.0" encoding="UTF-8"?> <datasources> <local-tx-datasource> <!-- le nom de l'objet qui sera récupéré par les applications --> <jndi-name>hsqlIonoSportDS</jndi-name> <!-- url d'accès à la base de données --> <connection-url>jdbc:hsqldb:hsql://localhostxdb</connection-url> <!-- classe du driver utilisé. Cette librairie doit être située dans le répertoire lib du serveur d'application --> <driver-class>org.hsqldb.jdbcDriver</driver-class> <!-- nom d'utilisateur et mot de passe d'accès --> <user-name>sa</user-name> <password></password> </local-tx-datasource> </datasources>
Si tout fonctionne bien, au redémarrage du serveur, le log suivant devrait apparaitre :
18:19:36,655 INFO [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=hsqlIonoSport'
Passons au vif du sujet : la configuration de sécurité de JBoss. Tout se passe dans le fichier login-config.xml du répertoire conf du serveur d'IonoSport. Il est possible d'y voir le paramétrage des différents modules de supervision de JBoss, ainsi que la configuration de sécurité « par défaut ». Voici ce qu'ils y ont ajouté chez IonoSport :
<application-policy name="secuPortailIonoSport"> <authentication> <login-module code="org.jboss.security.auth.spi.LdapLoginModule" flag="required"> <module-option name="password-stacking">useFirstPass</module-option> <module-option name="java.naming.factory.initial">com.sun.jndi.ldap.LdapCtxFactory</module-option> <module-option name="java.naming.provider.url">ldap://localhost:13295</module-option> <module-option name="java.naming.security.authentication">simple</module-option> <module-option name="principalDNPrefix">uid=</module-option> <module-option name="principalDNSuffix">,ou=persons,dc=stellarsport,dc=com</module-option> <module-option name="allowEmptyPasswords">false</module-option> </login-module> <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required"> <module-option name="password-stacking">useFirstPass</module-option> <module-option name="dsJndiName">java:hsqlIonoSportDS</module-option> <module-option name="rolesQuery"> SELECT GROUPE, 'Roles' FROM UTILISATEUR WHERE LOGIN = ? </module-option> </login-module> </authentication> </application-policy>
Un peu d'explication s'impose :
Maintenant que la configuration du serveur d'application est terminée, il ne reste plus aux développeurs d'IonoSport qu'à vérifier que celle du portail de leur entreprise est toujours valide. Elle se trouve dans deux fichiers distincts, web.xml et jboss-web.xml.
Dans jboss-web.xml, ils ont ajouté le paramètre permettant de se référer au mécanisme de sécurité configuré dans Jboss. Ce qui donne :
<security-domain>java:/jaas/secuPortailIonoSport</security-domain>
« secuPortailIonoSport » fait référence au nom donné à leur « application-policy », contenu dans le fichier login-config.xml. A noter que si ce paramètre « security-domain » n'était pas renseigné dans jboss-web.xml, la partie applicative du mécanisme de sécurité (configurée dans web.xml) utiliserait automatiquement la sécurité par défaut de Jboss, défini par le « application-policy » au nom sans équivoque de « other ».
Pour finir, voici ce qu'on peut trouver dans le fichier web.xml du portail d'IonoSport :
**<security-constraint> <web-resource-collection> <web-resource-name>Toute le portail</web-resource-name> <description>Sécurité globale du portail</description> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>*</role-name> </auth-constraint> </security-constraint>
<security-constraint> <web-resource-collection> <web-resource-name>interface admin</web-resource-name> <description>Protection interface d'admin</description> <url-pattern>/admin/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint>
<security-role> <role-name>WebAppUser</role-name> </security-role>
<security-role> <role-name>admin</role-name> </security-role>
<login-config> <auth-method>BASIC</auth-method> <realm-name>Authentification test</realm-name> </login-config>**
Les points suivants sont notables :
Et voilà, il ne reste plus aux développeurs d'IonoSport qu'à redéployer leur application dans Jboss et à démarrer/redémarrer ce dernier. Un utilisateur s'y connectant aura maintenant le droit à un pop up d'authentification. En fonction de la validité de ses identifiants et ses rôles, il aura accès à tout ou partie de l'application.
Finalement, même si l'achat d'IonoSport par StellarSport est certainement la source de nombreuses nuits blanches pour l'ingénieur de la DSI d'IonoSport en charge de la GDI, au moins il n'aura plus à se faire de cheveux blancs pour la sécurisation du portail de son entreprise...
JBoss offre une certaine flexibilité en ce qui concerne la mise en place de mécanisme de sécurité. Ainsi il intègre un fonctionnement natif permettant de ne pas développer de login-module "custom". D'un point de vue organisationnel, cela évite donc hypothétiquement de faire retourner l'application dans un cycle de développement logiciel là où finalement il n'a suffit que d'une action de configuration indépendante, réalisable par les équipes d'exploitation.