- PVSM.RU - https://www.pvsm.ru -

SSO используя Jasig CAS Server 4.0.0. Часть 1

Представьте, что у вас есть 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 проекта и добавление зависимостей

Так как это туториал буду все по порядку объяснять.
Создайте простой 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 по умолчанию.

SSO используя Jasig CAS Server 4.0.0. Часть 1

Теперь можно будет задеплоить и запустить, но прежде нам нужно выполнить небольшую конфигурацию Tomcat так как деплоить мы будем на него.

Конфигурация 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 сервер со стандартной конфигурацией.

Вы должны увидеть следующее:
SSO используя Jasig CAS Server 4.0.0. Часть 1
Если у вас появляется красная полоска с тестом, то это значит что вы сделали что-то не так, и HTTPS не включен.
И для того чтобы проверить что CAS сервер удачно запустился и работает, давайте залогинимся. Для этого вам нужно ввести стандартные логин и пароль:
Логин: casuser
Пароль: Mellon

После удачного входа вы должны увидеть:
SSO используя Jasig CAS Server 4.0.0. Часть 1

Поздравляю 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/