- PVSM.RU - https://www.pvsm.ru -
Представьте, что у вас есть web-проект, который состоит из двух или более частей, (part1.example.com) и вторая часть (part2.example.com). Теперь перед вам стоит задача сделать Аутентификацию пользователя, но так чтобы когда пользователь зайдя один раз в любую из частей web-проекта, например, в первую, то во второй он уже должен быть аутентифицирован.
Процесс такой Аутентификацию пользователя называют Технология единого входа или SSO (Single Sign-On) [1].
На Хабре уже есть подобная статья Jasig CAS — сервер аутентификации [2], но она немного устарела так как там используется CAS Server 3.* и на мое мнение она не достаточно детально изложена для людей которые впервые пытаются реализовать SSO используя Jasig CAS [3] (Central Authentication Service), но теория там довольно хорошо описана, поэтому рекомендую также просмотреть.
Обратите внимание, что мы будем конфигурировать Jasig CAS Server который будет аутентифицировать пользователя и отдавать web-клиентам. В дальнейшем планирую написать о реализации клиента для этого сервера.
Так как это туториал буду все по порядку объяснять.
Создайте простой Maven проект и в pom.xml добавьте следующие зависимости:
<properties>
<cas.version>4.0.0</cas.version>
</properties>
<dependencies>
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-webapp</artifactId>
<version>${cas.version}</version>
<type>war</type>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-support-generic</artifactId>
<version>${cas.version}</version>
<type>jar</type>
</dependency>
</dependencies>
cas-server-webapp — это стандартый сервер, который мы будем позже конфигурировать под себя;
cas-server-support-generic — а эта библиотека нам и позволит конфигурировать сервер под себя.
А также подключим плагин сборки:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<warName>cas</warName>
</configuration>
</plugin>
Он позволит собрать наш проект с контекстом /cas
.
После того как Maven скачает CAS у вас в проекте появится новая папка в которой уже будет сборка сервера CAS 4.0.0 по умолчанию.
Теперь можно будет задеплоить и запустить, но прежде нам нужно выполнить небольшую конфигурацию Tomcat так как деплоить мы будем на него.
Я не хочу повторяться, поэтому укажу ссылку на более детальное описание тому материалу, что будет ниже вот ссылка на описание [4].
Первым делом нужно сгенерировать сертификат и зарегистрировать его, для этого будем использовать стандартный keytool который есть в каждом JDK.
1. Генерируем Java Key Store:
keytool -genkey -alias casdc -keypass 12345678 -keystore ssoServer.jks -storepass 12345678 -validity 365
2. Теперь создаем на основании уже сгененированого хранилища сертификат:
keytool -export -alias casdc -file casServerPublic.cer -keystore ssoServer.jks -storepass 12345678
3. И полученый сертификат импортируем в хранилище довереных сертификатов:
keytool -import -alias casdc -file casServerPublic.cer -keypass 12345678 -keystore "C:/Program Files/Java/jdk1.7.0/jre/lib/security/cacerts" -storepass changeit
После этого заходим в папку ./apache-tomcat-8.0.9/conf и открываем на редактирование файл server.xml находим там строку: Define a SSL HTTP/1.1 Connector on port 8443
и после этой строки, по умолчанию это примерно 83 строка, вставляем следующий фрахмет xml:
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11NioProtocol"
SSLEnabled="true"
maxThreads="150"
scheme="https"
secure="true"
clientAuth="false"
sslProtocol="TLS"
keyAlias="casdc"
keystoreFile="C:/keys/ssoServer.jks"
keystorePass="12345678" />
Обратите внимание что сгенерированное хранилище ssoServer.jks я поместил в папку C:/keys/ssoServer.jks и после указал к нему полный путь.
keyAlias — это алиас, который мы указывали на первом шаге генерации хранилища.
keystorePass — пароль к нашему хранилищу ключей.
Таким образом мы сконфигурировали HTTPS, который так необходимый CAS серверу.
После этого можна запустить Tomcat и заделоить наш проект.
После перейдите по ссылке: https://localhost:8443/cas/ [5] — это cas сервер со стандартной конфигурацией.
Вы должны увидеть следующее:
Если у вас появляется красная полоска с тестом, то это значит что вы сделали что-то не так, и HTTPS не включен.
И для того чтобы проверить что CAS сервер удачно запустился и работает, давайте залогинимся. Для этого вам нужно ввести стандартные логин и пароль:
Логин: casuser
Пароль: Mellon
После удачного входа вы должны увидеть:
Поздравляю CAS сервер мы запустили. В следующем посте я расскажу как кастомизировать AuthenticationHandler, а именно возможность получения пользователя с БД или другой внешней системы.
Строго не судите, это мой первый прототип на данную тематику, и если будут замечания, с радостью выслушаю. Также я его постоянно улучшаю и о новых достижениях буду писать, конечно же если это будет кому-то интересно.
Исходники проекта на Github: https://github.com/alexbarchuk/local-cas [6]
Источник: https://wiki.jasig.org/display/CASUM/Configuring [7]
Автор: Devcolibri
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/64667
Ссылки в тексте:
[1] SSO (Single Sign-On): http://ru.wikipedia.org/wiki/SSO
[2] Jasig CAS — сервер аутентификации: http://habrahabr.ru/post/130289/
[3] Jasig CAS: http://www.jasig.org/cas
[4] ссылка на описание: http://habrahabr.ru/company/tcsbank/blog/142407/
[5] https://localhost:8443/cas/: https://localhost:8443/cas/
[6] https://github.com/alexbarchuk/local-cas: https://github.com/alexbarchuk/local-cas
[7] https://wiki.jasig.org/display/CASUM/Configuring: https://wiki.jasig.org/display/CASUM/Configuring
[8] Источник: http://habrahabr.ru/post/229375/
Нажмите здесь для печати.