2013-06-07 3 views
1

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

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, чтобы этот сценарий работал?

UPDATE

Я установил:

  • BASIC метод аутентификации в web.xml запрашивать учетные данные пользователя с помощью браузера конкретного диалогового
  • путь к JAAS. conf, в котором указывается, какая реализация класса LoginModule для использования

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

javax.security.auth.login.LoginException: Error: no CallbackHandler available to get authentication information

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

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


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

One of the advantages inherent to the EJB transport layer is the ability to leverage Java™ Authentication and Authorization Service (JAAS)-based authentication.

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

+0

ли я получить это право, что вы используете WSI транспорт, а не один EJB? – fnt

+0

fnt, да, я использую WSI. – koss

+0

Непонятно, как осуществляется доступ к вашему сервису и откуда. Это вызов удаленной конечной точки HTTP? Просьба уточнить это и показать код. – fnt

ответ

0

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

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

+0

Спасибо за эту статью, я прочитал ее, и у меня уже есть конфигурация JAAS, но авторизация не работает. Что касается вашего предложения об SSO, я не думаю, что это проще - для двух приложений, работающих в одном и том же приложении контейнера, SSO-решение является чрезмерным. – koss

+0

Я думал, что вы используете разные профили WAS (тогда SSO сводится к экспорту и импорту токена ltpa). BTW, FileNet CE использует JAAS только для аутентификации. Для авторизации CE использует LDAP, который вы определили при его установке. –

+0

@mbonaci Сложно противопоставить использование JASS и LDAP для аутентификации/авторизации. В некоторых отношениях LDAP используется для обоих. Правда, JAAS не используется для проверки полномочий. – fnt

-1

В последнее время я столкнулся с чем-то похожим, решение заключалось в использовании соединения EJB вместо WSI (конечная точка iiop: //).

Если вы уже вошли в систему ICN в своем пользовательском приложении в своем коде подключения, получите соединение с помощью вызова Factory.Connection.getConnection("iiop://server:orbPort/Engine/FileNet"), и поскольку ваш объект уже введен для вас с помощью JAAS, вам не нужно добавьте имя пользователя, пароль или даже строфу, вам даже не нужно создавать тему.

Односторонний эффект от этого (на самом деле преимущество) заключается в том, что вы выходите из одного слоя (очевидно, транспортный уровень WS) и напрямую работаете со слоем EJB, что значительно повысит производительность вашего приложения.

Надежда, что помогает вам, как это помогло мне;)