8.4.2. Пример настройки SSO

В данном разделе рассмотрен пример настройки SSO для двух приложений: Foo и Bar. Foo будет одновременно выполнять роль Identity Provider и Service Provider, Bar будет являться Service Provider.

  1. Оба приложения будут запущены на localhost, поэтому создайте алиасы в файле hosts:

    127.0.0.1    foo
    127.0.0.1    bar
  2. Создайте поочередно два проекта в Studio и назначьте разные порты Tomcat.

    Проект HTTP port AJP port Shutdown port

    Foo

    8081

    8011

    8051

    Bar

    8082

    8012

    8052

  3. В проекте Foo отредактируйте файл modules/web/web/WEB-INF/web.xml добавив следующую конфигурацию IDP:

    <servlet>
        <servlet-name>idp</servlet-name>
        <servlet-class>com.haulmont.idp.sys.CubaIdpServlet</servlet-class>
        <load-on-startup>3</load-on-startup>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>idp</servlet-name>
        <url-pattern>/idp/*</url-pattern>
    </servlet-mapping>
    
    <filter>
        <filter-name>idpSpringSecurityFilterChain</filter-name>
        <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
        <init-param>
            <param-name>contextAttribute</param-name>
            <param-value>org.springframework.web.servlet.FrameworkServlet.CONTEXT.idp</param-value>
        </init-param>
        <init-param>
            <param-name>targetBeanName</param-name>
            <param-value>springSecurityFilterChain</param-value>
        </init-param>
    </filter>
    
    <filter-mapping>
        <filter-name>idpSpringSecurityFilterChain</filter-name>
        <url-pattern>/idp/*</url-pattern>
    </filter-mapping>
  4. В проекте Foo отредактируйте файл web-app.properties модуля web, добавив следующие свойства:

    cuba.idp.serviceProviderUrls = http://foo:8081/app/,http://bar:8082/app/
    cuba.idp.serviceProviderLogoutUrls = http://foo:8081/app/dispatch/idpc/logout,http://bar:8082/app/dispatch/idpc/logout
    cuba.idp.trustedServicePassword = mdgh12SSX_pic2
    
    cuba.webAppUrl = http://foo:8081/app/
    cuba.web.externalAuthentication = true
    cuba.web.externalAuthenticationProviderClass = com.haulmont.cuba.web.auth.IdpAuthProvider
    cuba.web.idp.baseUrl = http://foo:8081/app/idp/
    cuba.web.idp.trustedServicePassword = mdgh12SSX_pic2
  5. В проекте Bar отредактируйте файл web-app.properties модуля web, добавив следующие свойства:

    cuba.webAppUrl = http://bar:8082/app/
    cuba.web.externalAuthentication = true
    cuba.web.externalAuthenticationProviderClass = com.haulmont.cuba.web.auth.IdpAuthProvider
    cuba.web.idp.baseUrl = http://foo:8081/app/idp/
    cuba.web.idp.trustedServicePassword = mdgh12SSX_pic2
  6. Запустите сервер Foo с помощью скрипта tomcat/bin/startup.*.

  7. Перейдите по адресу http://foo:8081/app в веб-браузере. Вы будете перенаправлены на страницу логина IDP. Войдите с именем и паролем admin / admin. Создайте нового пользователя, например u1.

  8. Запустите сервер Bar с помощью скрипта tomcat/bin/startup.*.

  9. Перейдите по адресу http://bar:8082/app в том же веб-браузере. Если вы по прежнему аутентифицированы в приложении Foo, то вы автоматически войдете как admin и в приложение Bar. Создайте пользователя u1 (пароль не важен) в приложении Bar.

  10. Теперь вы сможете входить как admin или u1 в оба приложения через единую форму логина, и если вы аутентифицированы в одном приложении, то вход во второе будет автоматическим, минуя форму.