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

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

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

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

1 ответ

Решение

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

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

После получения токена вам необходимо убедиться, что вы отправили куки-файл сеанса на защищенные страницы. В случае, если вы получаете самоподачу формы для 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.

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