2015-12-10 1 views
0

Contexteintégration Java JAAS avec Linux PAM, y compris le vieillissement de mot de passe

Dans notre projet, nous utilisons notre implémentation personnalisée LoginModule d'intégrer JAAS pour une application Web avec Linux PAM du serveur. Je sais qu'il y a des projets mettant en œuvre PAM pour JAAS mais ce n'est pas le point ici, surtout qu'ils ne résolvent pas mon problème.

Maintenant, l'exigence est venue de gérer correctement le vieillissement des mots de passe et l'état des ombres.

Ainsi, l'utilisateur qui tente de se connecter (en utilisant le formulaire web) avec mot de passe est:

  • a expiré devrait voir refuser l'accès et obtenir un message demandant de contacter l'administrateur de renouveler compte,
  • inactif devrait être refusé l'accès et obtenir un message demandant de changer son mot de passe en utilisant SSH,
  • dans la période d'avertissement devrait être accordé l'accès mais obtenir un message informant combien de jours r emain avant que le mot de passe devra être changé.

Ce sont des comportements normaux pour PAM qui apparaissent avec SSH par exemple. (Notez cependant que cela dépend de la configuration du PAM et les paramètres du compte.)

Le problème

Je peux facilement obtenir l'information nécessaire dans notre coutume LoginModule. Donc, je vais connaître le statut (expiré, inactif, avertissement, ...) et le nombre de jours restants (le cas échéant).

Mais comment le propager davantage?

La distinction expirée/inactive peut être faite en choisissant avec soin l'exception générée par l'implémentation LoginModule. Ce n'est pas parfait puisque si une couche intermédiaire consomme des exceptions pour ré-écrire quelque chose d'autre, je vais avoir des ennuis à nouveau. Mais je suppose que c'est faisable.

Mais qu'en est-il de la période d'avertissement? L'exception n'est pas possible car la connexion est réussie. Mais j'ai encore besoin de fournir les informations supplémentaires que ce mot de passe est en période d'avertissement et combien de jours il reste.

Le seul moyen de communication sur LoginModule Je vois est d'ajouter quelque chose au Subject. Mais ce que je dois ajouter ne semble pas non plus Principal ni un justificatif d'identité.

Bien sûr, je pouvais simplement pousser mon objet personnalisé en tant que référence ou implémentation personnalisée Principal. Mais cela ne semble pas être "naturel". Cela ressemble plus à casser le design. Je n'ai même pas trouvé d'exemple de quelqu'un faisant quelque chose comme ça.

Alors, comment ferais-je cela? Quels sont les moyens de communication à partir des informations supplémentaires sur le compte LoginModule?

Solution

Pour l'instant je suis sorti avec une solution de contournement.Je pourrais faire les requêtes requises sur PAM/NSS pour déterminer l'état du mot de passe et les jours restants (le cas échéant) dans un filtre ou un contrôleur de servlet. Ce n'est pas encore plus difficile - les mêmes appels doivent être faits à la fin.

Mais cela ne semble pas être la bonne façon de le résoudre parce qu'il mélange les responsabilités.

Alors, que pouvais-je faire d'autre?

Répondre

0

Je pense que je comprends ce que vous essayez d'atteindre, mais ce n'est pas la responsabilité de LoginModule de gérer l'état du mot de passe et ce n'est pas ce à quoi JAAS a été conçu. À cause de cela, je pense que votre solution de contournement est la voie à suivre. S'il est facile pour vous d'obtenir des informations supplémentaires dans LoginModule, créez un champ là ou passez un objet où vous allez stocker ces données et y accéder chaque fois qu'il doit être rendu à l'utilisateur. - KISS