Каков правильный способ аутентификации тяжелого клиента Java с помощью защищенного сервлета OpenAM?

Каков правильный способ аутентификации тяжелого клиента Java с помощью защищенного OpenAM сервлета?

Существует Java openAM sdk, которую я использовал, и она предоставляет доступ к токену SSO. Что-то ломается, когда этот же тяжелый Java клиент пытается отправить сериализованные объекты защищенному сервлету tomcat 7 (tomee+), используя этот SSO Token id как cookie. Фильтр OpenAM использует перенаправление со встроенной/скрытой формой, содержащей учетные данные. Это нарушает связь сериализованных объектов.

Итак, каков правильный способ аутентификации тяжелого клиента Java, чтобы он мог затем отправлять сериализованные объекты туда и обратно защищенному сервлету? Это вообще возможно?


person D-Klotz    schedule 03.02.2014    source источник


Ответы (1)


Существует несколько способов аутентификации клиента:

  • используйте REST API для аутентификации клиента (/identity/authenticate или /json/authenticate)
  • с помощью API ClientSDK AuthContext
  • отправка POST-запросов на /UI/Login (не обязательно лучший способ..)

После получения токена единственное, в чем вы должны убедиться, это в том, что вы отправляете файл cookie сеанса на защищенные страницы. Если вы получаете самоотправляющуюся форму для JAAS, это означает, что вы используете агент в режиме J2EE_POLICY или ALL и включена декларативная безопасность Java EE. Возможные решения для этой проблемной области:

  • измените клиент, чтобы он справился с содержимым входа JAAS FORM (т.е. захватил входные значения и выполнил POST вручную), после этого, возможно, вам также придется отправлять JSESSIONID со всеми вашими запросами.
  • рассмотрите возможность удаления защиты для ваших сервлетов в web.xml, таким образом, контейнер не будет пытаться отобразить форму входа JAAS, но тогда это также будет означать, что у вас также не будет причудливой интеграции JAAS (isUserInRole/getRemoteUser/@RolesAllowed/ так далее)
  • переместите свой сервлет в отдельное приложение, которое можно защитить в другом режиме фильтрации агента (URL_POLICY/SSO_ONLY), он все равно будет защищен, но опять же без интеграции JAAS.

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

person Peter Major    schedule 04.02.2014
comment
Спасибо за ваш добрый ответ. Пока я выбрал вариант №2. В файле web.xml нет ограничения роли для /servlets/* . Как вы упомянули, мне пришлось самому собирать информацию о ролях через openam SDK и передавать эту информацию внутри всех сервлетов. Не идеальное решение. Вы также правы в том, что это приложение не является клиентом Java EE. Возможно, теперь, когда я использую TomEE+, я смогу это сделать? Я не совсем уверен, с чего начать, если я хочу преобразовать его. Еще раз спасибо за ответ. - person D-Klotz; 04.02.2014