2 votes

Comment authentifier un utilisateur via un échange de certificat ?

J'ai une application web A où un utilisateur doit s'authentifier via une méthode nom d'utilisateur/mot de passe (https://server.local/webappA). Une connexion sécurisée est établie (HTTPS) avec le serveur A.

Ensuite, ces gars veulent une sorte de 'tromperie' pour utiliser le même utilisateur authentifié pour ouvrir une URL différente (https://server.local:8080/webappB/?param1=PID) tout en veillant à ce que l'authentification ne soit pas rompue. En d'autres termes, ils ne veulent pas que l'utilisateur saisisse à nouveau ses informations d'identification pour webappB. De plus, ce nouveau webappB ne devrait pas être accessible aux utilisateurs non authentifiés.

WebappB fonctionne sous Tomcat et pourrait être hébergé sur le même serveur sur un port différent. Notre travail pourrait être beaucoup plus facile si webappA disposait d'un système d'authentification bien connu tel que LDAP, mais ce n'est pas le cas. WebappA est de la société A et WebappB est de la société B.

Est-il possible que cela fonctionne ? Personnellement, je ne vois pas comment, donc je pourrais essayer avec vous les gars. Je suis libre d'installer tout module Apache ou serveur dont j'ai besoin.

4voto

Rites Points 420

Ce n'est pas trop compliqué, à condition que les deux applications puissent accéder à des données de session similaires. Mais seulement si vous pouvez jouer un peu avec le code. Étant donné que vous parlez de différentes entreprises fournissant le logiciel, cette deuxième partie pourrait ne pas être possible.

Essentiellement, lorsque qu'une session est démarrée avec AppA, le nom d'utilisateur et le mot de passe sont vérifiés par rapport à une source (que ce soit une base de données, un serveur IMAP, un serveur LDAP, peu importe), ce n'est en réalité pas la partie importante du processus. Après cette première collection de nom d'utilisateur/mot de passe, un jeton de session est émis. AppA vérifie le jeton de session lors de l'accès et s'il est valide ; charge la session (donc il n'est pas nécessaire de saisir le nom d'utilisateur/mot de passe à chaque fois que vous faites quelque chose).

Pour que cela fonctionne, vous avez besoin que AppB puisse (a) accéder à ce jeton de session (assez simple, il est probablement stocké sous forme de cookie), (b) accéder aux données de session qui répertorient les jetons valides et le lien avec l'utilisateur (si l'utilisateur n'est pas inclus avec le jeton dans le cookie) et (c) créer une session dans AppB sans un démarrage avec nom d'utilisateur/mot de passe, ou valider par rapport à la session existante.

Accès au jeton de session :

Cela devrait simplement être une question de lire les cookies fournis à AppB. Tant que AppA émet le cookie sans une valeur de path restrictive (faible risque puisque la société A ne peut pas connaître tous les dossiers sous lesquels AppA pourrait fonctionner).

Accès aux données de session :

Typiquement, une application stockerait des informations de session dans une sorte de table de base de données. La seule astuce pourrait être de savoir le nom d'utilisateur associé à une session (le jeton pourrait inclure le nom d'utilisateur, ou une sorte d'identifiant, ou aucun des deux). La validité de session telle que définie par AppA doit être respectée par AppB

Créer une session AppB :

Probablement la partie la plus délicate, si AppB a une injection de dépendance sur le module d'authentification, (incluant le démarrage de session, la détection de session et la terminaison de session) alors il suffit de faire en sorte que l'application lise le même jeton de session que AppA, compare/valide par rapport aux données de session et traduise et étende si nécessaire. Remarque à moins que les deux applications soient modifiées, vous voudrez également que AppB reporte les connexions et éventuellement les déconnexions à AppA

Sécurité :

Si AppA utilise un cookie pour stocker/récupérer des informations de session sans une valeur de chemin, notons que n'importe quelle autre partie du même site web peut également voir ce cookie. Si une partie du site est servie sous http - y compris les images, les feuilles de style et le javascript - ce cookie de session sera exposé et accessible par des logiciels de renifleurs (comme firesheep) ou du matériel. Servir du contenu statique à partir d'un serveur différent (ou du même serveur sous un nom différent) aide à atténuer cela.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X