web-dev-qa-db-fra.com

JAAS pour les êtres humains

J'ai du mal à comprendre JAAS. Tout semble plus compliqué qu'il ne devrait l'être (en particulier les didacticiels Sun). J'ai besoin d'un tutoriel simple ou d'un exemple sur la façon d'implémenter la sécurité (authentification + autorisation) dans Java application basée sur Struts + Spring + Hibernate avec référentiel utilisateur personnalisé. Peut être implémenté à l'aide d'ACEGI.

78
Dan
23
Martlark

D'autres utilisateurs ont fourni des liens très utiles ci-dessus, donc je ne vais pas me soucier des liens. J'ai fait une recherche similaire dans JAAS pour les applications Web et je suis tombé sur un "barrage mental" jusqu'à ce que je réalise enfin que JAAS est un cadre qui aborde la sécurité sur une "couche" différente des applications Web dans le Java = World. Il est conçu pour résoudre les problèmes de sécurité dans Java SE et non Java EE.

JAAS est un cadre de sécurité conçu pour sécuriser les choses à un niveau bien inférieur à celui des applications Web. Quelques exemples de ces choses sont le code et les ressources disponibles au niveau de la JVM, d'où toute cette capacité à définir des fichiers de stratégie au niveau de la JVM.

Cependant, comme Java EE est construit au-dessus de Java SE, quelques modules de JAAS ont été réutilisés dans Java EE sécurité tels que les LoginModules et les rappels.

Notez qu'en plus de la sécurité Java EE), il existe également la sécurité Spring (anciennement connue sous le nom d'Acegi), qui, similaire à la fonction native Java EE, la sécurité aborde un niveau beaucoup plus élevé). "couche" dans le problème de sécurisation des applications Web. Il s'agit d'une implémentation de sécurité distincte qui n'est pas basée sur la sécurité standard Java EE, bien qu'elle se comporte de la même manière à bien des égards).

Pour résumer, à moins que vous ne cherchiez à sécuriser des ressources dans le niveau Java SE (classes, ressources système), je ne vois aucune utilisation réelle de JAAS autre que l'utilisation de la classe et des interfaces communes Concentrez-vous simplement sur l'utilisation de Spring Security ou de la simple sécurité Java EE security qui résout tous les deux de nombreux problèmes de sécurité courants des applications Web.

51
lsiu

javax.security est une API trop compliquée à mon humble avis. En conséquence, il existe des implémenteurs non seulement de LoginModules, mais de l'ensemble de l'API d'authentification et d'autorisation, qui crée la couche d'abstraction ci-dessus, comme les gestionnaires d'authentification et d'autorisation.

Pour commencer, il est bon d'imprimer this dans votre mémoire.

Deuxièmement, à mon humble avis, la bibliothèque la plus simple à installer et à utiliser pour JAAS est Jboss PicketBox . Il explique comment effectuer l'authentification et l'autorisation via JBossAuthenticationManager et JBossAuthorizationManager ... Facilement configurable via XML ou annotations. Vous pouvez l'utiliser pour gérer à la fois les applications Web et les applications autonomes.

Si vous avez besoin de la partie autorisation pour gérer l'accès au référentiel, en termes d'ACL pour les ressources, c'est ce que vous cherchez à coup sûr.

Le problème avec la sécurité est que vous devez généralement le personnaliser en fonction de vos besoins, vous pouvez donc finir par implémenter:

LoginModule - vérifie le nom d'utilisateur + le mot de passe

CallbackHandler est utilisé comme ceci new LoginContext("Sample", new MyCallbackHandler());

CallbackHandler est transmis aux LoginModules sous-jacents afin qu'ils puissent communiquer et interagir avec les utilisateurs - en demandant un nom d'utilisateur et un mot de passe via une interface utilisateur graphique, par exemple. Ainsi, à l'intérieur du gestionnaire, vous obtenez le nom d'utilisateur et le mot de passe de l'utilisateur et il est transmis au LoginModule.

LoginContext - alors vous appelez simplement lc.login (); et authentifier les informations d'identification. LoginContext est rempli avec le sujet authentifié.

Cependant, le piquet Jboss vous offre un moyen très simple de procéder, sauf si vous avez besoin de quelque chose de spécifique.

11
lisak

la réponse de lsiu est l'une des rares réponses ici à vraiment "comprendre";)

Ajoutant à cette réponse, une très bonne référence sur ce sujet est Qu'est-il arrivé à JAAS? .

Il explique comment JASPIC est le lien dans Java EE entre les modèles de sécurité Servlet et EJB et potentiellement un module de connexion JAAS, mais que dans de nombreux cas le rôle de JAAS est réduit à celui d'un nom d'utilisateur relativement simple et fournisseur de rôles dans Java EE.

Du même auteur est JAAS in the Enterprise , qui est un article plus ancien mais qui fournit beaucoup de données historiques sur les raisons pour lesquelles le Java SE (JAAS) et Java EE ont divergé comme ils l'ont fait.

Dans l'ensemble, mais quelques types de JAAS sont directement utilisés dans Java EE, essentiellement Principal, Subject et CallbackHandler. Les deux derniers sont principalement utilisé par JASPIC. J'ai expliqué JASPIC dans l'article Implémentation de l'authentification de conteneur dans Java EE avec JASPIC .

8
Arjan Tijms

Je ne peux pas trop parler de JAAS lui-même, mais ce guide des "étapes suggérées" sur Spring Security et le manuel de référence sont tous les deux de très bonnes ressources sur Spring Security - si votre la configuration est quelque chose de presque simple, vous n'avez pas vraiment besoin de faire beaucoup plus que de les lire.

2
matt b

Pour un tutoriel purement JAAS, consultez this . Il est ancien mais devrait aider avec les bases de JAAS.

1
Mark