JAAS

- Mise à jour : 08/06/2015 - Copyright(C) 2015 - Laurent Chrétien

- Le Contexte, le Login, le Callback-handler, le Sujet - pp : 08/06/2015 - dm : 08/06/2015


LE CONTEXTE, LE LOGIN, LE CALLBACK-HANDLER, LE SUJET

Révisions : 2015 - 08/06

Il s'agit de récupérer l'identifiant validé de l'utilisateur voulant exécuter le code. Identifiant validé et complété par son rôle, c'est à dire ses droits.

Ceci de façon très solide et normalisé, modulable, pluggable, extensible sans limite.

JAAS constitue le cadre de développement de ces modules.

Il distingue :

- le module dit de "Login", qui se charge de valider l'identifiant (nom et mot de passe), typiquement en interrogeant une base de données, tout en y récupérant en plus ses droits (son ou ses rôles),

- le module d'interrogation (le Callback-Handler) de l'utilisateur (fenêtre de saisie du login, lecture d'après son certificat éventuel, ou encore éventuellement issu de sa connection au système (login windows ou unix)).

Le contexte (classe LoginContext) réunit, couple, combine, ces deux classes.

La première est identifiée par un nom qui renvoie à une entrée du fichier jaas.config, qui contient le nom effectif de la classe (configuration et reconfiguration donc très simples).

La seconde est fourni en deuxième argument du constructeur (context = new LoginContext("Log1", new MonCallBackHandler()).

Une fois ce contexte instancié, le login peut être exécuté ( context.login() ), ce qui va exécuter la classe de Login (méthode aussi nommée login()) en lui passant en paramètre l'instance de la classe de Callback-Handler, afin de lui demander, via sa méthode handle(), les identifiants.

Pour celà login() passe à handle() un tableau de petits objets (NameCallback pour le nom, PasswordCallback) qu'elle doit donc renseigner, à partir de la saisie faite par l'utilisateur.

On voit que par ce procédé, la classe Login chargée du contrôle d'un identifiant, ignore donc bien complètement la façon dont est obtenu cet identifiant. On peut en changer à loisir.

La classe Login peut donc à présent effectuer son contrôle au sein d'un fichier, d'une base de données, ou bien d'un accès Ldap (unique, centralisé, valable pour tous les identifications de l'entreprise). Et par ailleurs, y extraire le rôle c'est à dire les droits de cet utilisateur.

Le retour vers le demandeur se fait au travers d'une instance de Subject, que login() doit remplir avec des "Principal" (nom, rôle, autre).