JAAS для людей - PullRequest
       20

JAAS для людей

77 голосов
/ 10 марта 2009

Мне трудно понять JAAS. Все это кажется более сложным, чем должно быть (особенно уроки Sun). Мне нужен простой учебник или пример о том, как реализовать безопасность (аутентификация + авторизация) в Java-приложении на основе Struts + Spring + Hibernate с пользовательским репозиторием пользователя. Может быть реализовано с использованием ACEGI.

Ответы [ 6 ]

51 голосов
/ 29 марта 2009

Другие пользователи предоставили несколько очень полезных ссылок выше, поэтому я не буду беспокоиться о ссылках. Я провел аналогичное исследование в JAAS для веб-приложений и столкнулся с «препятствием на пути к разуму», пока, наконец, не понял, что JAAS - это инфраструктура, обеспечивающая безопасность на другом «уровне», чем веб-приложения в мире Java. Он создан для решения проблем безопасности в Java SE, а не в Java EE.

JAAS - это структура безопасности, созданная для защиты вещей на гораздо более низком уровне, чем веб-приложение. Некоторым примером таких вещей являются код и ресурсы, доступные на уровне JVM, отсюда и все эти возможности устанавливать файлы политики на уровне JVM.

Однако, поскольку Java EE построен на основе Java SE, несколько модулей из JAAS были повторно использованы в безопасности Java EE, такие как LoginModules и Callbacks.

Обратите внимание, что в дополнение к безопасности Java EE, существует также безопасность Spring (ранее известная как Acegi), которая, подобно нативной безопасности Java EE, решает гораздо более высокий "уровень" в проблеме защиты веб-приложений. Это отдельная реализация безопасности, которая не построена поверх стандартной безопасности Java EE, хотя во многих отношениях она действует аналогично.

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

23 голосов
/ 10 марта 2009

Вот некоторые ссылки, которые я использовал, чтобы помочь понять JAAS:

http://www.owasp.org/index.php/JAAS_Tomcat_Login_Module

http://www.javaworld.com/jw-09-2002/jw-0913-jaas.html

http://jaasbook.wordpress.com/

http://roneiv.wordpress.com/2008/02/18/jaas-authentication-mechanism-is-it-possible-to-force-j_security_check-to-go-to-a-specific-page/

Также ознакомьтесь с практическими рекомендациями по конфигурации областей Apache tomcat:

http://tomcat.apache.org/tomcat-6.0-doc/realm-howto.html

11 голосов
/ 21 июня 2011

javax.security - это слишком сложный API. В результате есть разработчики не только LoginModules, но и всего API аутентификации и авторизации, которые создают вышеупомянутый уровень абстракции, как менеджеры аутентификации и авторизации.

Для начала, хорошо бы напечатать это в вашу память.

Во-вторых, imho, самой простой библиотекой JAAS для установки и запуска является Jboss PicketBox . В нем рассказывается, как выполнять аутентификацию и авторизацию через JBossAuthenticationManager и JBossAuthorizationManager ... Легко настраивается через XML или аннотации. Вы можете использовать его для управления как веб-приложениями, так и автономными приложениями.

Если вам нужна часть авторизации для управления доступом к репозиторию, с точки зрения ACL для ресурсов, это именно то, что вы ищете.

Проблема с безопасностью заключается в том, что обычно вам нужно настроить ее под свои нужды, поэтому вы можете в конечном итоге реализовать:

LoginModule - проверяет имя пользователя + пароль

CallbackHandler используется следующим образом new LoginContext("Sample", new MyCallbackHandler());

CallbackHandler передается базовым модулям LoginModules, чтобы они могли общаться и взаимодействовать с пользователями - например, запрашивая имя пользователя и пароль через графический интерфейс пользователя. Таким образом, внутри обработчика вы получаете имя пользователя и пароль от пользователя, и они передаются в LoginModule.

LoginContext - тогда вы просто вызываете lc.login (); и подтвердить подлинность учетных данных. LoginContext заполняется аутентифицированным субъектом.

Однако Jboxss picketbox дает вам действительно простой способ, если вам не нужно что-то конкретное.

8 голосов
/ 04 мая 2013

lsiu ответ - один из немногих ответов, которые действительно "получают это";)

Если добавить к этому ответу, действительно хорошая ссылка на эту тему: Что случилось с JAAS? .

Он объясняет, как JASPIC является связующим звеном в Java EE между моделями безопасности Servlet и EJB и, возможно, модулем входа в систему JAAS, но во многих случаях роль JAAS сводится к роли сравнительно простого поставщика имени и роли в Java EE. .

От того же автора JAAS на предприятии , которая является более старой статьей, но содержит много исторических сведений о том, почему модели Java SE (JAAS) и Java EE расходились так, как они это делали.

В целом, но несколько типов из JAAS непосредственно используются в Java EE, в основном Principal, Subject и CallbackHandler. Последние два в основном используются JASPIC. Я объяснил JASPIC в статье Реализация аутентификации контейнера в Java EE с помощью JASPIC .

2 голосов
/ 10 марта 2009

Я не могу слишком много говорить с самим JAAS, но это руководство "предлагаемые шаги" по Spring Security и справочное руководство - оба довольно хорошие ресурсы по Spring Security - если ваша настройка очень проста, вам не нужно делать больше, чем просто читать.

1 голос
/ 10 марта 2009

Для ознакомления только с руководством JAAS this . Он старый, но должен помочь с основами JAAS.

...