2013-02-19 15 views
15

Ho un setup di tomcat 7 con oldApp.war e newApp.war distribuito su di esso. Entrambe le applicazioni condividono le stesse credenziali di accesso per gli utenti sul database.Come implementare SSO su un'applicazione Web tomcat esistente

Sono in grado di accedere alle app utilizzando rispettivamente https://localhost/oldApp e https:localhost/newApp.

My oldApp è un'applicazione Java Spring MVC e quando l'utente è connesso a oldApp voglio avere un collegamento che porterà l'utente nella newApp senza chiedere le credenziali di accesso.

Voglio sapere come implementare SSO per fare questo. Preferibilmente non voglio eseguire alcun servizio esterno per gestire questo.

Grazie in anticipo.

risposta

6

È possibile implementare SSO in molti modi diversi:

  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 ha molte implementazioni per i ruoli di identità/fornitore di servizi.

Per un elenco implementazioni IDP posso puntare a questo post StackOverflow: https://stackoverflow.com/a/761774/126414

Se si prevede di implementare un fornitore di servizi v'è una bella estensione della molla: http://static.springsource.org/spring-security/site/extensions/saml/index.html

+0

puoi fornire qualche risorsa senza molla –

+0

@JafarAli Potresti fornire maggiori dettagli nella tua domanda? Qual è il tuo caso d'uso? Hai IDP esistente (quale stai usando?) E lavori su SP per integrarti con esso? – svlada

+0

Abbiamo Oracle Access Manager con supporto SAML 2.0 come IDP e la mia app assumerà il ruolo di fornitore di servizi. La mia app non utilizza Spring. –

10

Aggiornamento: la sua 2018 e le informazioni di seguito non sono aggiornate. Se stai iniziando una nuova applicazione, utilizza un protocollo di identità federato come Open ID Connect e riceverai SSO gratuitamente.

ci sono alcuni approcci si può prendere:

  1. Si potrebbe utilizzare Tomcat per l'autenticazione e utilizzare single sign on le capacità di Tomcat. Se stai utilizzando Spring per autenticare l'utente, potrebbe essere necessario modificare alcune cose. Inoltre, a seconda di come stai facendo l'autenticazione, l'autenticazione di Tomcat potrebbe non essere abbastanza configurabile.
  2. È possibile impostare un terzo, CAS, servlet (o qualcosa di simile), sul quale si autenticano entrambe le applicazioni Web.
  3. È possibile impostare da soli utilizzando Spring e pre-authenticated filters. Fondamentalmente dovresti scrivere il tuo filtro pre-autenticato che ha verificato la posizione in cui entrambi i servlet avevano accesso a (database ?, contesto condiviso?) Per le credenziali esistenti prima di tornare ai vecchi metodi di autenticazione. Dovresti assicurarti di cancellare questa autenticazione in un filtro da qualche parte in modo che la prossima richiesta non arrivi automaticamente ad ereditare le credenziali delle richieste precedenti.
+0

L'URL CAS non è aggiornato. Ecco l'URI corrente: https://www.apereo.org/projects/cas – Elijah

+0

Grazie, aggiornato l'URL – Pace

2

è possibile distribuire il CAS server (che non è altro che una guerra) in tomcat e configurare il filtro dell'app Web di conseguenza. Puoi ricevere aiuto da questo link.

0

sono riuscito questo con Valve SSO di Tomcat:

  1. Mettere SSO valvola all'interno di Host elemento (localhost) di server.xml del file:

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

  2. aggiungere utenti e ruoli (ad es. in tomcat_users.xml):

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

  3. In web-app elemento delle tue applicazioni web.xml file, aggiungere vincoli di sicurezza:

    <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. questo è tutto. Ora accedi a una delle tue app e dovresti accedere ad altre app.

Ovviamente, non è necessario utilizzare la password del piano di testo in produzione, questo è solo un esempio veloce. Devi considerare l'autenticazione del digest e configurare SSL su Tomcat.

Spero che questo aiuti qualcuno!