2016-07-07 2 views
0

Я новичок в мире LDAP + Liferay + OpenAM, поэтому я задаюсь вопросом, может ли кто-нибудь указать мне в правильном направлении проблемы, которые у меня есть. В реальной среде есть 2 сервера LDAP, сервер OpenAM и приложение Liferay. То, что нужно клиенту, - это аутентификация пользователей в Liferay против OpenAM, а OpenAM должна использовать серверы LDAP. Проблема в том, что пользователь существует только на одном из LDAP-серверов (он будет перемещен из одного в другой в одну точку будущего). Чего хочет клиент:OpenAM + два сервера LDAP

  1. Пользователи должны иметь возможность аутентифицироваться независимо от того, что LDAP содержит пользователя.
  2. Полученный токен должен быть действительным для обоих серверов LDAP, поскольку он будет использоваться в другой службе (у меня нет контроля над ним) только для одного из них для проверки подлинности.

Как я уже сказал, я новичок в этом мире, поэтому, если ответ слишком сложный (я боюсь, что это будет для меня), возможно, вы могли бы указать мне книги или документы, которые могли бы решить эту проблему сценарий.

Благодаря

ответ

0

Как и в предыдущем ответе, вы должны направить все ваши запросы на аутентификацию на сервер OpenAM и позволить ему проверять учетные данные на правильном LDAP-сервере. Использование двух разных областей (по одному для каждого сервера LDAP) не будет работать в вашем случае, так как для LifeRay потребуется знать, где найти пользователя перед началом работы. Кроме того, сеансы связаны с определенной сферой.

Существует множество вариантов решения проблемы. Вот только пара:

Вариант 1

Если у вас есть контроль над потоком аутентификации. То есть, если ваше приложение использует пользовательский интерфейс и взаимодействует с OpenAM через REST, вы можете создать два разных экземпляра модуля аутентификации в одной области (скажем, два экземпляра модуля аутентификации DataStore), каждый из которых указывает на другой сервер LDAP.

Давайте назовем этот модуль экземплярами DataStore1 и DataStore2. Ваше приложение может собирать учетные данные пользователя (имя пользователя и пароль) и отправлять их в DataStore1. Если аутентификация прошла успешно, пользователь уже выполнил вход в систему. Если это не удается, приложение может попробовать с DataStore2.

Конечно, это не идеально, так как вы будете делать два запроса на аутентификацию за один логин вместо одного.

Вариант 2

Лучший вариант (хотя и более сложные в реализации) будет создавать модуль пользовательской аутентификации. Этот модуль может попытаться аутентифицировать пользователя на сервере LDAP 1, а затем попытаться с сервером LDAP 2, если первая аутентификация завершилась неудачно. Обратите внимание, что с этой опцией вам не нужна специальная логика на стороне приложения, поскольку она будет отправлять только один запрос проверки подлинности на сервер OpenAM. Фактически, вы можете защитить свое приложение с помощью агента политики OpenAM.

Другим преимуществом такого подхода по сравнению с вариантом 1 является то, что вы можете перенести своих пользователей за кулисы, предполагая, что конечной целью является миграция пользователей с сервера LDAP 1 на сервер LDAP 2.Если первая проверка подлинности завершилась успешно, ваш пользовательский код может прочитать запись пользователя с сервера LDAP 1 и скопировать его на сервер LDAP 2.

Надеюсь, это поможет вам решить проблему.

+0

Отличный ответ. Большое спасибо. Я попробую эти альтернативы и напишу свой опыт с конфигурацией :) –

0

Вы должны настроить Liferay использовать OpenAM для всех авторизаций, и вы можете настроить OpenAM использовать оба сервера LDAP (используют различные сферы). Детали конфигурации OpenAM будут представлены в документации OpenAM.

Смежные вопросы