Java >> Java tutorial >  >> Tag >> Tomcat

Sådan implementeres SSO på eksisterende tomcat-webapplikation

Opdatering:Det er 2018, og nedenstående oplysninger er forældede. Hvis du starter en ny applikation, så brug en fødereret identitetsprotokol som Open ID Connect, og du får SSO gratis.

Der er et par fremgangsmåder, du kan tage:

  1. Du kan bruge Tomcat til godkendelse og bruge Tomcats single sign-on-funktioner. Hvis du i øjeblikket bruger Spring til at godkende brugeren, skal du muligvis ændre nogle ting. Afhængigt af hvordan du laver godkendelse, kan Tomcats godkendelse muligvis ikke konfigureres nok.
  2. Du kan konfigurere en tredje, CAS, servlet (eller noget lignende), som begge webapplikationer autentificerer imod.
  3. Du kan selv konfigurere dette ved hjælp af Spring og præ-godkendte filtre. Du ville grundlæggende skulle skrive dit eget præ-autentificerede filter, som kontrollerede en placering, som begge servlets havde adgang til (database?, delt kontekst?) for eksisterende legitimationsoplysninger, før du falder tilbage til gamle godkendelsesmetoder. Du skal sørge for at rydde denne godkendelse i et filter et eller andet sted, så den næste anmodning ikke automatisk arver de tidligere anmodningers legitimationsoplysninger.

Du kan implementere SSO på mange forskellige måder:

  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 har mange implementeringer til identitets-/tjenesteudbyderroller.

For en liste over IDP-implementeringer kan jeg henvise dig til dette stackoverflow-indlæg:https://stackoverflow.com/a/761774/126414

Hvis du planlægger at implementere en tjenesteudbyder, er der en fin forårsudvidelse:http://static.springsource.org/spring-security/site/extensions/saml/index.html


Jeg har klaret dette med Tomcats SSO-ventil :

  1. Sæt SSO Valve i Host (localhost) element i server.xml fil:

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

  2. Tilføj brugere og roller (f.eks. i tomcat_users.xml ):

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

  3. I web-app element i din apps web.xml fil, tilføje sikkerhedsbegrænsninger:

    <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. Det er det. Log nu ind på en af ​​dine apps, og du skal være logget ind på andre apps.

Du skal selvfølgelig ikke bruge et almindeligt tekstkodeord i produktionen, dette er blot et hurtigt eksempel. Du bør overveje Digest-godkendelse såvel som at konfigurere SSL på Tomcat.

Jeg håber, at dette vil hjælpe nogen!

P.S. hvis du gemmer brugere i SQL-databasen , tjek venligst min kommentar under dette svar.


Java tag