web-dev-qa-db-fra.com

Comment implémenter l'authentification unique sur une application Web Tomcat existante

J'ai une installation Tomcat 7 avec oldApp.war et newApp.war déployée dessus. Les deux applications partagent les mêmes informations de connexion pour les utilisateurs de la base de données. 

Je peux accéder aux applications en utilisant https://localhost/oldApp et https:localhost/newApp respectivement. 

Mon oldApp est une application Spring MVC Java et lorsque l'utilisateur est connecté à oldApp, je souhaite disposer d'un lien qui le mènera dans newApp sans demander les informations d'identification. 

Je veux savoir comment implémenter l'authentification unique pour le faire. De préférence, je ne souhaite utiliser aucun service externe pour gérer cela.

Merci d'avance. 

18
Qstacker

Vous pouvez implémenter l'authentification unique de différentes manières:

  1. Oauth 2 - http://oauth.net/2/
  2. SAML 2 - https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=security

SAML 2.0 comporte de nombreuses implémentations pour les rôles de fournisseur d'identité/de service.

Pour une liste d'implémentations IDP, je peux vous indiquer cette publication stackoverflow: https://stackoverflow.com/a/761774/126414

Si vous envisagez de mettre en place un fournisseur de services, il existe une extension Nice spring: http://static.springsource.org/spring-security/site/extensions/saml/index.html

7
svlada

Mise à jour: ses informations 2018 et ci-dessous sont obsolètes. Si vous démarrez une nouvelle application, utilisez un protocole d’identité fédérée tel que Open ID Connect et bénéficiez gratuitement de la connexion unique.

Il y a quelques approches que vous pouvez prendre:

  1. Vous pouvez utiliser Tomcat pour l'authentification et utiliser les fonctionnalités single sign on de Tomcat. Si vous utilisez actuellement Spring pour authentifier l'utilisateur, vous devrez peut-être modifier certaines choses. De plus, en fonction de votre authentification, l'authentification de Tomcat risque de ne pas être suffisamment configurable.
  2. Vous pouvez configurer un troisième, CAS , servlet (ou quelque chose de similaire) par lequel les deux applications Web s'authentifient.
  3. Vous pouvez le configurer vous-même à l'aide de filtres Spring et pré-authentifiés . Vous devez en principe écrire votre propre filtre pré-authentifié qui vérifie l'emplacement des informations d'identification existantes des deux servlets (base de données?, Contexte partagé?) Avant de revenir aux anciennes méthodes d'authentification. Vous voudrez sûrement effacer cette authentification dans un filtre quelque part afin que la demande suivante ne puisse pas hériter automatiquement des informations d'identification de la demande précédente.
11
Pace

Vous pouvez déployer le serveur CAS (qui n'est rien d'autre qu'une guerre) dans Tomcat et configurer le filtre de votre application Web en conséquence. Vous pouvez prendre l’aide de ce link .

3
somaniA

J'ai réussi ceci avec la valve SSO de Tomcat:

  1. Placez la vanne SSO dans l'élément hôte (localhost) du fichier server.xml:

    <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> <Valve className="org.Apache.catalina.authenticator.SingleSignOn" /> </Host>

  2. Ajouter des utilisateurs et des rôles (par exemple, dans Tomcat_users.xml):

    <user username="user1" password="user1" roles="employee"/>

  3. Dans l'élément web-app de votre fichier apps web.xml, ajoutez des contraintes de sécurité:

    <security-constraint> <web-resource-collection> <web-resource-name>App name</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>employee</role-name> </auth-constraint></security-constraint><login-config> <auth-method>FORM</auth-method> <realm-name>file</realm-name> <form-login-config> <form-login-page>/login.jsp</form-login-page> <form-error-page>/error.jsp</form-error-page> </form-login-config></login-config><security-role> <role-name>employee</role-name></security-role>

  4. C'est tout. Maintenant, connectez-vous à l’une de vos applications et vous devriez être connecté à d’autres applications.

Bien sûr, vous ne devriez pas utiliser de mot de passe avion-texte en production, ceci est juste un exemple rapide. Vous devez envisager l'authentification Digest, ainsi que la configuration de SSL sur Tomcat.

J'espère que cela aidera quelqu'un! 

2
akelec