10.2.8. Activer l'authentification basée formulaire

L'authentification basée formulaire offre la flexibilité de définir une page JSP/HTML personnalisée de connexion, et une page séparée sur laquelle les utilisateurs sont redirigés si une erreur a lieu lors de la connexion.
L'authentification basée formulaire est définie en incluant <auth-method>FORM</auth-method> dans l'élément <login-config> du descripteur de déploiement, web.xml. La connexion et les pages d'erreur sont également définies dans <login-config>, comme suit :
<login-config>
  <auth-method>FORM</auth-method>
  <form-login-config>
    <form-login-page>/login.html</form-login-page>
    <form-error-page>/error.html</form-error-page>
  </form-login-config>
</login-config>
Lorsqu'une application web avec l'authentification par formulaire est déployée, le conteneur web utilise FormAuthenticator pour diriger les utilisateurs vers la page appropriée. JBoss EAP gère un pool de session afin que les informations d'authentification n'aient pas besoin d'être présentes pour chaque demande. Lorsque FormAuthenticator reçoit une demande, il interroge org.apache.catalina.session.Manager pour savoir s'il y a une session existante. Si aucune session n'existe, une nouvelle session sera créée. FormAuthenticator vérifie alors les informations d'identification de la session.

Note

Chaque session est identifiée par un ID de session, une chaîne de 16 octets générée à partir de valeurs aléatoires. Ces valeurs sont extraites de /dev/urandom (Linux) par défaut et hachées avec MD5. Les vérifications sont effectuées lors de la création de l'ID de session pour s'assurer que l'ID créé soit unique.
Une fois vérifiée, l'ID de session est attribué dans le cadre d'un cookie et ensuite renvoyé au client. Ce cookie revient dans les requêtes clientes suivantes et sera utilisé pour identifier la session utilisateur.
Le cookie passée au client est une paire nom-valeur avec plusieurs attributs facultatifs. L'attribut d'identifiant est appelé JSESSIONID. Sa valeur est une chaîne hexadécimale de l'ID de session. Ce cookie est configuré pour être non persistant. Cela signifie que du côté client, il sera supprimé lorsque le navigateur se fermera. Côté serveur, les sessions expirent après 30 minutes d'inactivité, quand les objets session et leurs informations d'identification seront supprimés.
Si un utilisateur tente d'accéder à une application web protégée par l'authentification formulaire, FormAuthenticator met en cache la demande, crée une nouvelle session si nécessaire et redirige l'utilisateur vers la page de connexion définie dans login-config. Dans l'exemple de code précédent, la page de connexion est login.html. L'utilisateur entre alors son nom d'utilisateur et son mot de passe dans le formulaire HTML fourni. Les nom d'utilisateur et mot de passe sont passés à FormAuthenticator par l'intermédiaire de l'action de formulaire j_security_check.
Le FormAuthenticator authentifie alors le nom d'utilisateur et le mot de passe par rapport au domaine attaché au contexte de l'application web. Dans JBoss Enterprise Application Platform, le domaine est JBossWebRealm. Lorsque l'authentification réussit, FormAuthenticator récupère la requête enregistrée à partir du cache et redirige l'utilisateur vers sa requête initiale.

Note

Le serveur reconnaît les requêtes d'authentification de formulaire que lorsque les URI se terminent par /j_security_check et que les paramètres j_username et j_password existent.