Как реализовать SSO в существующем веб-приложении tomcat

У меня есть установка tomcat 7 с установленными oldApp.war и newApp.war. Оба приложения имеют одинаковые учетные данные для пользователей в базе данных.

Я могу получить доступ к приложениям, используя https://localhost/oldApp и https:localhost/newApp соответственно.

My oldApp - это Java-приложение Spring MVC, и когда пользователь вошел в oldApp, я хочу иметь ссылку, которая приведет пользователя в newApp, не запрашивая учетные данные для входа.

Я хочу знать, как реализовать SSO для этого. Я предпочитаю не использовать внешнюю службу для этого.

Спасибо заранее.

Ответы

Ответ 1

Вы можете реализовать SSO по-разному:

SAML 2.0 имеет множество реализаций для ролей Identity/Service Provider.

В списке реализации IDP я могу указать на этот пост stackoverflow: fooobar.com/questions/350364/...

Если вы планируете внедрить поставщика услуг, есть приятное расширение spring: http://static.springsource.org/spring-security/site/extensions/saml/index.html

Ответ 2

Обновление: его 2018 и ниже информация устарела. Если вы запускаете новое приложение, используйте федеративный протокол идентификации, такой как Open ID Connect, и вы получите SSO бесплатно.

Есть несколько подходов, которые вы можете использовать:

  1. Вы можете использовать Tomcat для аутентификации и использовать возможности единого входа Tomcat. Если вы используете Spring для аутентификации пользователя, вам может потребоваться изменить некоторые параметры. Кроме того, в зависимости от того, как вы выполняете аутентификацию, аутентификация Tomcat может быть недостаточно настраиваемой.
  2. Вы можете настроить третий, CAS, сервлет (или что-то подобное), против которого проверяются оба веб-приложения.
  3. Вы можете настроить это самостоятельно, используя Spring и предварительно аутентифицированные фильтры. В основном вам нужно было бы написать свой собственный фильтр, прошедший предварительную проверку подлинности, который проверял бы некоторые местоположения, к которым оба сервлета имели доступ (база данных? Общий контекст?) Для существующих учетных данных, прежде чем вернуться к старым методам аутентификации. Вы должны обязательно очистить эту аутентификацию где-нибудь в фильтре, чтобы следующий запрос не мог автоматически наследовать учетные данные предыдущих запросов.

Ответ 3

Вы можете развернуть сервер CAS (который является ничем иным, как войной) в tomcat и соответствующим образом настроить фильтр веб-приложений. Вы можете воспользоваться этой ссылкой .

Ответ 4

Мне удалось это с клапаном Tomcat SSO:

  1. Поместите SSO Valve в элемент Host (localhost) файла server.xml:

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

  2. Добавьте пользователей и роли (например, в tomcat_users.xml):

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

  3. В элементе web-app вашего файла web.xml добавьте ограничения безопасности:

    <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. Это. Теперь войдите в одно из ваших приложений, и вы должны войти в другие приложения.

Конечно, вы не должны использовать простой текстовый пароль в производстве, это только быстрый пример. Вы должны рассмотреть Digest аутентификацию, а также настроить SSL на Tomcat.

Надеюсь, это кому-нибудь поможет!

PS Если вы храните пользователей в базе данных SQL, пожалуйста, проверьте мой комментарий ниже этого ответа.