it-swarm.com.de

So implementieren Sie SSO in vorhandene Tomcat-Webanwendungen

Ich habe ein Tomcat 7-Setup, auf dem oldApp.war und newApp.war installiert sind. Beide Anwendungen haben dieselben Anmeldeinformationen für Benutzer in der Datenbank. 

Ich kann über https://localhost/oldApp und https:localhost/newApp auf die Apps zugreifen. 

Meine alteApp ist eine Spring MVC Java-Anwendung. Wenn der Benutzer an der altenApp angemeldet ist, möchte ich einen Link haben, der den Benutzer in die neueApp bringt, ohne nach den Anmeldeinformationen zu fragen. 

Ich möchte wissen, wie man SSO implementiert, um dies zu tun. Ich möchte vorzugsweise keinen externen Dienst ausführen, um damit umzugehen.

Danke im Voraus. 

18
Qstacker

Sie können SSO auf verschiedene Arten implementieren:

  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 bietet viele Implementierungen für Rollen von Identitäts-/Diensteanbietern.

Für eine IDP-Implementierungsliste kann ich Sie auf diesen stackoverflow-Beitrag verweisen: https://stackoverflow.com/a/761774/126414

Wenn Sie planen, einen Dienstanbieter zu implementieren, gibt es eine Nice-Erweiterung für Frühling: http://static.springsource.org/spring-security/site/extensions/saml/index.html

7
svlada

Update: Es ist 2018 und die Informationen unten sind veraltet. Wenn Sie eine neue Anwendung starten, verwenden Sie ein Verbundidentitätsprotokoll wie Open ID Connect, und Sie erhalten SSO kostenlos.

Es gibt einige Ansätze, die Sie ergreifen könnten:

  1. Sie können Tomcat für die Authentifizierung verwenden und die single sign on - Funktionen von Tomcat verwenden. Wenn Sie derzeit Spring verwenden, um den Benutzer zu authentifizieren, müssen Sie möglicherweise einige Änderungen vornehmen. Abhängig von der Art der Authentifizierung ist die Tomcat-Authentifizierung möglicherweise nicht ausreichend konfigurierbar.
  2. Sie können ein drittes CAS , Servlet (oder ähnliches) einrichten, bei dem sich beide Webanwendungen authentifizieren.
  3. Sie können dies selbst einrichten, indem Sie Spring- und vorauthentifizierte Filter verwenden. Sie müssten grundsätzlich einen eigenen, vorab authentifizierten Filter schreiben, der einen bestimmten Speicherort, auf den beide Servlets Zugriff hatten (Datenbank ?, freigegebener Kontext?), Auf vorhandene Berechtigungsnachweise prüfte, bevor auf alte Authentifizierungsmethoden zurückgegriffen wurde. Stellen Sie sicher, dass diese Authentifizierung in einem Filter gelöscht wird, damit die nächste Anforderung nicht automatisch die Anmeldeinformationen der vorherigen Anforderungen übernimmt.
11
Pace

Sie können den CAS-Server (der nichts anderes als ein Krieg ist) in Tomcat bereitstellen und den Filter Ihrer Web-App entsprechend konfigurieren. Sie können Hilfe von diesem link nehmen.

3
somaniA

Dies ist mir mit Tomcat's SSO Valve gelungen:

  1. Platzieren Sie das SSO-Ventil in das Host-Element (localhost) der server.xml-Datei:

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

  2. Fügen Sie Benutzer und Rollen hinzu (z. B. in Tomcat_users.xml):

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

  3. Fügen Sie im web-app-Element Ihrer Apps web.xml-Datei Sicherheitsbeschränkungen hinzu:

    <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. Das ist es. Melden Sie sich jetzt bei einer Ihrer Apps an, und Sie sollten bei anderen Apps angemeldet sein.

Natürlich sollten Sie in der Produktion kein Fließtextkennwort verwenden. Dies ist nur ein schnelles Beispiel. Sie sollten die Digest-Authentifizierung sowie die Konfiguration von SSL für Tomcat in Betracht ziehen.

Ich hoffe das hilft jemandem! 

2
akelec