Как реализовать 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 бесплатно.
Есть несколько подходов, которые вы можете использовать:
- Вы можете использовать Tomcat для аутентификации и использовать возможности единого входа Tomcat. Если вы используете Spring для аутентификации пользователя, вам может потребоваться изменить некоторые параметры. Кроме того, в зависимости от того, как вы выполняете аутентификацию, аутентификация Tomcat может быть недостаточно настраиваемой.
- Вы можете настроить третий, CAS, сервлет (или что-то подобное), против которого проверяются оба веб-приложения.
- Вы можете настроить это самостоятельно, используя Spring и предварительно аутентифицированные фильтры. В основном вам нужно было бы написать свой собственный фильтр, прошедший предварительную проверку подлинности, который проверял бы некоторые местоположения, к которым оба сервлета имели доступ (база данных? Общий контекст?) Для существующих учетных данных, прежде чем вернуться к старым методам аутентификации. Вы должны обязательно очистить эту аутентификацию где-нибудь в фильтре, чтобы следующий запрос не мог автоматически наследовать учетные данные предыдущих запросов.
Ответ 3
Вы можете развернуть сервер CAS (который является ничем иным, как войной) в tomcat и соответствующим образом настроить фильтр веб-приложений. Вы можете воспользоваться этой ссылкой .
Ответ 4
Мне удалось это с клапаном Tomcat SSO:
-
Поместите SSO Valve в элемент Host (localhost) файла server.xml
:
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> <Valve className="org.apache.catalina.authenticator.SingleSignOn"/> </Host>
-
Добавьте пользователей и роли (например, в tomcat_users.xml
):
<user username="user1" password="user1" roles="employee"/>
-
В элементе 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>
-
Это. Теперь войдите в одно из ваших приложений, и вы должны войти в другие приложения.
Конечно, вы не должны использовать простой текстовый пароль в производстве, это только быстрый пример. Вы должны рассмотреть Digest аутентификацию, а также настроить SSL на Tomcat.
Надеюсь, это кому-нибудь поможет!
PS Если вы храните пользователей в базе данных SQL, пожалуйста, проверьте мой комментарий ниже этого ответа.