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
Vous pouvez utiliser un serveur d'identification ouvert pour l'authentification, séparant ainsi votre authentification et la logique de l'application.
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.
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,
- 1. Authentification NTLM pour une application côté serveur Web
- 2. Sessions ou cookies pour une application Web?
- 3. asp.net côté serveur viewstate sans sessions
- 4. Implémentation de sessions dans un serveur Web Java?
- 5. Application côté serveur
- 6. Comment dois-je écrire une application web node.js avec le code côté serveur et côté client?
- 7. Serveur Android pour Rails Gestion des sessions
- 8. Comment faire pour exécuter du code dans un côté côté serveur (asp.net) dans une application facebook?
- 9. Comment configurer une icône pour une application Web dans Java?
- 10. Comparaison des technologies Web côté serveur
- 11. Éviter connexion dans une application web java en utilisant des cookies
- 12. Java EE- Composant côté serveur de test
- 13. Serice RESTful Web côté serveur
- 14. Authentifier une application mobile côté serveur
- 15. Comment trouver des informations sur toutes les sessions pour une application web/site
- 16. Application Web Java générale
- 17. Facebook: comment persister des sessions dans une application (connect/graph)
- 18. ActionScript - FlashMediaServer. Application côté serveur
- 19. Gestion des exceptions côté serveur java rmi
- 20. Sessions de servlets dans une application Android
- 21. Technologie côté client pour une application Web volumineuse
- 22. Comment envoyer des notifications XMPP à partir d'une application Java côté serveur?
- 23. Langage côté serveur pour application TCP-socket évolutive
- 24. MVC côté serveur vs côté client dans les applications Web
- 25. Rendu de canevas HTML5 côté client ou côté serveur pour une application de tableau blanc node.js?
- 26. Comment «spec» un serveur Web pour soutenir une application donnée?
- 27. Comment configurer log4j.xml pour une application Web?
- 28. Séparation des sessions utilisateur dans JMeter exécutant Java Request sampler (avec SyncProxy) sur une application GWT
- 29. Librairie Java open source pour produire des miniatures de pages web côté serveur
- 30. Cadre Delphi côté serveur pour gérer les sessions et répondre avec JSON aux requêtes ajax?
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