©echiner1

Sécuriser une application JSF avec Realm

Introduction

Pour sécuriser une application JSF sans utiliser d’autres frameworks tel que Spring ou Struts qui intègrent un module de sécurité (Spring Sécurity pour Spring), on peut utiliser Realm.

Realm est un mécanisme servant à identifier les utilisateurs. Il permet de vérifier le login et le mot de passe d’un utilisateur afin de savoir si l’utilisateur connecté possède les droits suffisants pour consulter la ressource demandée.

Pour chaque utilisateur, Realm connait la liste des rôles(Autorisations) associés à un utilisateur. La protection des ressources se fait par rôle, on indique le rôle dont doit disposer un utilisateur pour accéder à la ressource.

Modes de fonctionnement de Realm

Coté client, les modes de connexion sont ceux définis par le protocole HTTP.

Implémentation de Realm avec JSF dans GlassFish

Realm sur GlassFish

Afin d’utiliser realm avec GlassFish, il est nécessaire d’ajouter dans GlassFish les Utilisateurs (Utilisation de FileRealm).

Pour cela:

Interface d'administration de GlassFish > Configurations > Server-config
> security > Realms > File (Dans notre cas)

Si le Realm n’existe pas, cliquer sur <new> afin de créer celui souhaité (FileRealm, JDBCRealm, LDAPRealm) Ensuite, il est nécessaire d’ajouter les utilisateurs. Cliquer sur <Manage users> puis sur <New>. Remplissez les champs de l’utilisateur nom, mot de passe ainsi que les rôles de celui-ci exemple:

ADMIN:USER:CONFIG ....

Dans l’application web

Il faut ajouter au fichier web.xml la liste des adresses à sécuriser ainsi que les rôles nécessaires pour y accéder.

<!-- web.xml -->
<wep-app>
  ...
   <!-- liste des contraintes -->
   <security-constraint>
       <display-name>Constraint1</display-name>
       <!-- Url à sécurisée  -->
       <web-resource-collection>
           <web-resource-name>Administration</web-resource-name>
           <description/>
           <url-pattern>/admin/*</url-pattern>
       </web-resource-collection>
       <!-- Rôle requis -->
       <auth-constraint>
           <description/>
           <role-name>ADMIN</role-name>
       </auth-constraint>
       <!-- Utilisation de HTTPS -->
       <user-data-constraint>
           <description/>
           <transport-guarantee>CONFIDENTIAL</transport-guarantee>
       </user-data-constraint>
   </security-constraint>
   <!-- utilisation de FileRealms -->
   <login-config>
       <auth-method>BASIC</auth-method>
       <realm-name>file</realm-name>
   </login-config>
   <!--Définition du rôle -->
   <security-role>
       <description>Admin roles</description>
       <role-name>ADMIN</role-name>
   </security-role>
</web-app>

Enfin, il faut ajouter au fichier sun-web.xml le mapping des rôles. Afin de faire la liaison entre les rôles de l’application et ceux du serveur.

Sinon lors de la connexion d’un utilisateur, les ressources ne seront pas accessibles, un message du type « Access to the requested resource has been denied » sera affiché.

<glassfish-web-app error-url="">
	<context-root>/</context-root>
	<security-role-mapping>
	<role-name>ADMIN</role-name>
	<group-name>ADMIN</group-name>
    </security-role-mapping>
</glassfish-web-app>

Créer un répertoire /admin dans le dossier web de votre projet et essayez d’y accéder. Une fenêtre vous demandra de vous identifier.