9.5. 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.idp.enabled должно быть установлено в
true
. -
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.
-
-