2

Je souhaite sécuriser l'accès aux ressources de mon application Web. J'authentifie donc mes utilisateurs à l'aide des mécanismes standard et utilise des sessions côté serveur pour conserver l'état authentifié. Je souhaite déployer sur plusieurs systèmes dans une configuration équilibrée de charge, mais je ne veux pas commencer à synchroniser l'état de session sur mon infrastructure. Existe-t-il des moyens (en utilisant soit des installations basées sur les spécifications dans Java EE ou des bibliothèques couramment disponibles comme Spring Security) de préserver l'état d'authentification d'un utilisateur sans sessions côté serveur, par exemple en repoussant l'état requis sur le client? Si oui, y a-t-il des risques supplémentaires dont je dois être conscient? Mise à jour - J'utilise la sécurité déclarative selon les spécifications Java EE webapp et l'authentification via un référentiel LDAP.Comment éviter d'utiliser des sessions côté serveur pour l'authentification dans une application Web Java?

Répondre

0

Vous pouvez utiliser un serveur d'identification ouvert pour l'authentification, séparant ainsi votre authentification et la logique de l'application.

+0

Je pense que j'ai toujours le même problème. (J'utilise l'authentification LDAP pour l'instant) Lorsque l'utilisateur tente d'accéder à une ressource protégée, il est envoyé à un formulaire de connexion. Ils se connectent, puis (en cas de succès) sont envoyés à la ressource. Mais je pense qu'un identificateur de session est alors utilisé pour «se souvenir» que l'utilisateur est connecté, exigeant que les données de session soient stockées sur le serveur.Comment puis-je éviter de stocker les données de session sur le serveur tout en gardant à l'esprit l'état d'authentification de l'utilisateur? – Brabster

1

Je ne suis pas au courant d'une solution-cadre, mais ce qui suit fonctionne le:

Une fois l'utilisateur connecté avec succès dans la création d'un jeton et définissez sa valeur sécurisée comme un cookie. Le jeton contient toutes les informations requises (ID utilisateur, heure de création, etc.) et est chiffré à l'aide d'un algorithme. Tous les nœuds de votre cluster peuvent donc lire le jeton, le déchiffrer et identifier l'utilisateur. Vous créez ensuite un ServletFilter interceptant toutes les demandes, examinant le jeton et définissant les informations d'identification d'utilisateur correspondantes, par exemple. ServletRequest.getRemoteUser() en utilisant un HttpServletRequestWrapper.

Une façon de résoudre le problème. Mais vous devez faire attention, la sécurité faite par vous-même doit être bien pensée.

1

Vous pouvez stocker un type de jeton dans un cookie après authentification et gérer vous-même les attributs de session. Par exemple, avoir une table de base de données dont la clé primaire est le jeton d'authentification et stocke les données de session de l'utilisateur ... N'oubliez pas d'implémenter un travail pour nettoyer les "sessions" inactives. En ce qui concerne ce que vous devriez savoir, gardez à l'esprit que les cookies sont quelque chose d'facile à accéder, voler, supprimer, désactiver, etc. Le jeton d'authentification devrait être quelque chose de fort et vérifiable (hash une combinaison de l'utilisateur ip + navigateur + sel tournant + quelques autres choses que vous pouvez vérifier).

Il est également judicieux de diviser les authentifications des utilisateurs en deux niveaux. "A le cookie" et "vient de valider le cookie" ... Disons que "a le cookie" est un état qui peut être là pour une demi-heure (ou peut-être plus) qui permet à l'utilisateur de naviguer sur le site. L'état "Just validated" est pour les opérations importantes, et devrait obliger l'utilisateur à entrer à nouveau ses informations d'identification. Le délai d'attente pour cet "état juste validé" ne devrait pas dépasser deux minutes. N'oubliez pas que je suppose que votre site ne contient pas de données vraiment sensibles. Pour ces situations, je recommanderais quelque chose comme l'authentification SSL bidirectionnelle avec des jetons externes ou des cartes de sécurité ainsi que des jetons rotatifs et l'authentification biométrique: D: D: D ... Je suppose que vous voyez ce que je veux dire. Cheers,

Questions connexes