JAAS для людей

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

Ответ 1

Вот некоторые из ссылок, которые я использовал, чтобы помочь понять 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/

Также ознакомьтесь с инструкцией по настройке Real-серверов Apache tomcat:

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

Ответ 2

Другие пользователи предоставляют несколько очень полезных ссылок, поэтому я не буду беспокоиться о ссылках. Я провел аналогичные исследования в JAAS для веб-приложений и столкнулся с "блокпостом разума", пока, наконец, не осознаю, что JAAS - это платформа, защищающая безопасность на другом "слое", а затем веб-приложениях в Java World. Он построен для решения проблем безопасности в 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 безопасности или простой старой безопасности Java EE, которые одновременно решают множество проблем безопасности веб-приложений.

Ответ 3

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

Для начала хорошо напечатать этот в вашей памяти.

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

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

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

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

CallbackHandler используется как new LoginContext("Sample", new MyCallbackHandler());

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

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

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

Ответ 4

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

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

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

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

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

Ответ 5

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

Ответ 6

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