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.