8.4. Single-Sign-On для приложений CUBA
Single-Sign-On (единый вход, SSO) для приложений CUBA позволяет пользователям входить в несколько запущенных приложений введя единые имя и пароль один раз в течение сессии веб-браузера.
При использовании SSO существуют два типа приложений:
-  Identity Provider (IDP) - приложение, обеспечивающее аутентификацию пользователей. Оно содержит форму для ввода логина/пароля и выполняет их проверку в соответствии со списком зарегистрированных пользователей. Identity Provider в некоторой SSO-системе может быть только один. 
-  Service Provider (SP) - обычное приложение, которое перенаправляет к IDP для аутентификации пользователей. SP должен содержать тот же список пользователей, что и IDP (пароли при этом не важны, так как они проверяются на IDP). SP обеспечивает проверку прав пользователей в соответствии с их ролями и группами доступа. Количество SP в SSO-системе не ограничено. 
Приложение может одновременно выполнять функции IDP и SP, то есть установка отдельного IDP не требуется. Функциональность SSO предоставляется модулем cuba-idp, входящим в состав блока Web Client. Приложение можно разрабатывать как обычно, а SSO настроить уже на этапе деплоймента, если требуется.
| 
        Warning 
       | CUBA SSO использует собственный протокол, основанный на HTTP, и на данный момент не поддерживает интеграции с системами, использующими стандартные протоколы аутентификации, такие как SAML или OIDC. | 
При использовании SSO, когда пользователь заходит на адрес SP, он перенаправляется на страницу IDP для ввода имени и пароля. После успешной аутентификации, IDP перенаправляет пользователя обратно в приложение SP, где пользователь входит автоматически.
Для настройки SSO необходимо выполнить следующее:
-  На Identity Provider: -  Добавьте следующую конфигурацию в файл web.xmlмодуля web (если вы выполняете настройку на этапе деплоймента, данный файл находится здесь:tomcat/webapps/app/WEB-INF/web.xml):<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>
-  Установите свойства приложения: -  cuba.idp.serviceProviderUrls - разделенный запятой список URL приложений SP (символ /в конце URL обязателен). Например:cuba.idp.serviceProviderUrls = http://foo:8081/app/,http://bar:8082/app/
-  cuba.idp.serviceProviderLogoutUrls - разделенный запятой список URL, которые используются для уведомления SP о логауте или истечении сессии пользователей. Стандартные приложения CUBA принимают такие запросы на адресе /dispatch/idpc/logout. Например:cuba.idp.serviceProviderLogoutUrls = http://foo:8081/app/dispatch/idpc/logout,http://bar:8082/app/dispatch/idpc/logout
-  cuba.idp.trustedServicePassword - пароль, используемый в коммуникации server-to-server между SP и IDP. 
-  Опциональные свойства: cuba.idp.sessionExpirationTimeoutSec, cuba.idp.ticketExpirationTimeoutSec, cuba.idp.sessionExpirationCheckIntervalMs, cuba.idp.cookieMaxAgeSec, cuba.idp.cookieHttpOnly. 
 
-  
 
-  
-  На Service Providers: -  Установите свойства приложения: -  cuba.webAppUrl - URL приложения (символ /в конце обязателен). Данный URL должен быть в списке URL, определенном свойством IDP cuba.idp.serviceProviderUrls. Например:cuba.webAppUrl = http://foo:8081/app/
-  cuba.web.externalAuthentication должно быть установлено в true.
-  cuba.web.externalAuthenticationProviderClass должно быть установлено в com.haulmont.cuba.web.auth.IdpAuthProvider.
-  cuba.web.idp.baseUrl - на данном URL IDP принимает запросы на аутентификацию. Стандартный CUBA IDP использует адрес idp/(символ/в конце обязателен). Например:cuba.web.idp.baseUrl = http://main:8080/app/idp/
-  cuba.web.idp.trustedServicePassword - должен быть таким же как заданный для IDP в свойстве cuba.idp.trustedServicePassword. 
 
-  
 
-