Давайте по порядку:
- У вас установлен и настроен LDAP Add-on, теперь пользователи могут в стандартном окне логина вводить свое имя и пароль, на сервере это перенаправляется в LDAP, там происходит авторизация, и все хорошо.
- Теперь вы хотите, чтобы пользователи так же могли ходить через REST. Т.е. REST Add-on должен перенаправлять имя пользователя и пароль ТОМУ ЖЕ САМОМУ механизму, который УЖЕ настроен через LDAP Add-on и которым пользуется стандартный GUI.
- Следовательно, не нужно отдельно настраивать REST API Add-on для работы с LDAP, указывать ему сервер и прочие вещи, оно же уже все настроено в LDAP Add-on.
Наша задача - задействовать в REST те же механизмы, что и в стандартном GUI.
Я быстренько написал прототип, который решает эту задачу. Нужно подменить CubaUserAuthenticationProvider
и для пользователей, которые указаны в cuba.web.standardAuthenticationUsers
ходить через стандартный механизм CUBA, а для всех остальных - использовать LDAP.
Для этого я указал в rest-dispatcher-spring
в модуле web
нового провайдера - CubaLdapUserAuthenticationProvider
. А сам провайдер сделан довольно просто, по мотивам LdapAddonLoginProvider
, который используется в GUI. Он создает TrustedClientCredentials
на основе переданного имени пользователя и пароля, вместо стандартных LoginPasswordCredentials
. А первые уже проверяются LDAP механизмами.
Это всего лишь идея, так что не судите строго. Пример приложения в аттаче, быстрая проверка показывает, что все нормально работает, можно логиниться в UI и получать токен через REST API, но тщательно не проверял. Дальше там можно развивать тему, проверять, включено ли свойство ldap.addonEnabled
и т.д.
По идее, если LDAP Add-on нормально по имени пользователя и паролю логинит всех ваших мультидоменных пользователей через GUI, то и в этом приложении они должны нормально логиниться ровно так же через REST.
Пробуйте получить токен сначала:
http://localhost:8080/app/rest/v2/oauth/token с передачей всех заголовков, как в документации
А потом можете позвать сервис: http://localhost:8080/app/rest/v2/services/sessionplanner_SessionService/findSessionsBySpeaker?speakerEmail=jane.doe@sessions.com с нужным токеном.
Пример сделан на базе приложения из QuickStart, база - PostgreSQL.
session-planner.zip (98.6 КБ)