Как передать учетные данные пользователя провайдеру аутентификации WebLogic 11g? - PullRequest
0 голосов
/ 31 августа 2018

Я думаю, что у меня есть общее представление о AuthenticationProviders WebLogic, но я не могу понять, как передать учетные данные пользователя поставщику.


Мое понимание

Читая JAAS, я думаю, что у меня есть представление о том, как использовать LoginContext для входа в систему. LoginContext выбирает параметры LoginModule и JAAS из файла конфигурации JAAS. Определив экземпляр некоторого CallbackHandler, вы можете передать учетные данные пользователя. После вызова LoginContext.login() вход в систему осуществляется с использованием ассоциированного LoginModule.

После ознакомления с документацией Oracle по AuthorizationProviders, большая часть кажется довольно простой. AuthenticationProvider использует JAAS для входа в систему. Кажется, что AuthenticationProvider управляет LoginContext внутренне.

Мне трудно понять, как WebLogic управляет LoginContext и CallbackHandler, которые в итоге передаются методу LoginModule.initialize.


Ситуация

Приложение:

  • Веб-приложение Java, работающее в WebLogic 11g (10.3.6).
  • Попытка аутентификации с использованием имени пользователя и пароля, без формы входа.

В настоящее время приложение использует форму входа в систему и отправляет с действием "j_security_check". Есть пользовательские AuthenticationProvider и LoginModule, которые обрабатывают логин и обрабатывают имя пользователя и пароль, представленные в форме.

Я предполагаю, что WebLogic может внутренне обработать действие j_security_check и знает, как сопоставить поля ввода формы с CallbackHandler, который передается в пользовательский LoginModule.


Моя цель

Я пытаюсь создать второй процесс входа в систему, который включает в себя извлечение учетных данных (имя пользователя / пароль) из заголовков HTTP-запроса. Учетные данные в настоящее время извлекаются с помощью фильтра сервлетов. Так или иначе, я хотел бы передать эти учетные данные в LoginModule, который уже существует для формы входа.

Я хотел бы сделать одно из следующего:

  1. Возьмите учетные данные прямо из заголовков и передайте их AuthenticationProvider (через некоторую пользовательскую реализацию и / или конфигурацию AuthenticationProvider
  2. Извлеките учетные данные заголовка с помощью фильтра сервлетов и вручную передайте их AuthenticationProvider.

Мой вопрос

Что я могу сделать, чтобы передать учетные данные заголовка в LoginModule?

  1. Существует ли предопределенный AuthenticationProvider, который может извлечь имя пользователя и пароль из заголовка? Можете ли вы описать поток от запроса до входа в систему?
  2. Есть ли какой-нибудь способ получить доступ к CallbackHandler или LoginContext, используемому AuthenticationProvider? Таким образом, я могу передать учетные данные самому AuthenticationProvider.
  3. Как WebLogic знает, где получить учетные данные пользователя и как связать их с определенным AuthenticationProvider?

Вполне возможно, что по пути я пропускаю некоторые ключевые концепции, поэтому не стесняйтесь ставить меня на правильный путь со всем, что я упомянул.

Спасибо!

1 Ответ

0 голосов
/ 04 сентября 2018

Моя самая большая проблема с пониманием того, как WebLogic AuthenticationProviders понимал, как передавать учетные данные. Казалось, что слишком много вещей "автоматически" происходило за кулисами. Я чувствовал, что мне нужно каким-то образом получить доступ к LoginContext и / или CallbackHandler, которыми WebLogic манипулировал в фоновом режиме. Я был на правильном пути, но пропустил что-то важное в аутентификации JAAS ...

Поставщики аутентификации - как JAAS работает с платформой безопасности WebLogic

Шаги 3 и 4 аутентификации JAAS перечислены как:

  1. Контейнер WebLogic Server вызывает WebLogic Security Framework. Если существует CallbackHandler на стороне клиента , содержащий информация аутентификации передается в WebLogic Security Framework .

  2. Для каждого из сконфигурированных провайдеров аутентификации WebLogic Security Framework создает CallbackHandler с использованием аутентификации информация, которая была передана в . (Это внутренние CallbackHandlers созданные на стороне сервера платформой WebLogic Security Framework, и не относится к CallbackHandler клиента.)

Это та часть, которая меня отбросила. Мой разум был направлен на CallbackHandler передачу WebLogic аутентификационной информации. Мне не удалось найти заметку, показанную в конце шагов:

Примечание

Для аутентификации, выполняемой полностью на стороне сервера, процесс будет начинаться с шага 3, и контейнер WebLogic Server будет вызывать метод weblogic.security.services.authentication.login до шаг 4.

Аутентификация - Сводка метода

И разве вы этого не знаете ... Authentication имеет четыре login метода, каждый из которых принимает CallbackHandler!

В моей ситуации я могу использовать фильтр сервлетов, чтобы выбрать учетные данные из заголовка запроса, передать их в CallbackHandler, затем вызвать Authentication.login(CallbackHandler callbackHandler), чтобы успешно войти в систему с пользовательским LoginModule.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...