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.