Авторизация JAAS в веб-сервисе, взаимодействующем с FileNet Content Engine

У меня есть два приложения, работающие на одном экземпляре сервера WAS 7.0, одно из которых - IBM Business Space (которое в данном случае не имеет значения), другое - служба RESTful, которую я разрабатываю. Оба приложения взаимодействуют с FileNet Content Engine. Я знаю, что Business Space использует JAAS для решения задач аутентификации и авторизации, как и мой сервис. Требования при обращении к службе - выполнять запросы к FileNet изнутри службы с использованием токена безопасности пользователя, который уже вошел в Business Space. У меня нет глубокого понимания механизма JAAS, и я могу ошибаться, но быстрый поиск в Google говорит, что можно получить тему JAAS вошедшего в систему пользователя и передать ее в UserContext моей службы. Код, который я использую, следующий:

if (userContext == null) {
    userContext = UserContext.get();
    if (userContext.getSubject() == null) {
        LoginContext loginContext = new LoginContext("config");
        loginContext.login();
        userContext.pushSubject( loginContext.getSubject() );
    }
}
UserContext.set(userContext);

Соответствующий файл конфигурации JAAS:

config {
    com.filenet.api.util.WSILoginModule required;
};

У меня есть следующие вопросы:

  • Должен ли я передать обработчик обратного вызова конструктору LoginContext, если я не хочу предлагать пользователю вводить учетные данные, если он не вошел в приложение Business Space?
  • Нужно ли настраивать какие-либо настройки WAS, чтобы этот сценарий работал?

ОБНОВИТЬ

Я установил:

  • ОСНОВНОЙ метод аутентификации в web.xml, чтобы запросить у пользователя учетные данные, используя диалог браузера
  • путь к файлу jaas.conf, указывающий, какую реализацию класса LoginModule использовать

Когда я тестирую это решение, оно терпит неудачу со следующей ошибкой:

javax.security.auth.login.LoginException: ошибка: нет CallbackHandler для получения информации об аутентификации

При условии успешной авторизации обратного вызова, это означает, что по какой-то причине служба не может получить требуемый объект JAAS.

Что мне не хватает?


Кроме того, я наткнулся на следующее заявление на веб-сайте IBM:

Одним из преимуществ, присущих транспортному уровню EJB, является возможность использовать аутентификацию на основе Java™ службы аутентификации и авторизации (JAAS).

Однако это не означает, что невозможно использовать JAAS при использовании транспорта WS. Или это?

1 ответ

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

Но вы рассматривали возможность использования более простого механизма единого входа для сохранения аутентификации. контекст между профилями / серверами WAS?

Другие вопросы по тегам