Как правильно аутентифицировать 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.