JAAS glassfish example

Требуется организовать авторизацию и аутентификацию с использованием JAAS в GlassFish на основе групп в LDAP.

Литература:

http://docs.oracle.com/cd/E19575-01/821-0183/abhbi/index.html

http://habrahabr.ru/post/92608/

http://vav1lon.blogspot.ru/2010/07/jsf2-active-derectory-glassfish-v-301.html

http://netbeans.org/kb/docs/web/security-webapps_ru.html

http://docs.oracle.com/cd/E19182-01/821-0871/gjepj/index.html

http://glassfish.10926.n7.nabble.com/Active-Directory-LDAP-Realm-Configuration-td9117.html

Попробуем реализовать самую простую аутентификацию и авторизацию при помощи JAAS в GlassFish и LDAP сервере на основе ActiveDirectory.

Итак, JAAS производит авторизацию не на уровне программы, а на уровне сервера приложения или контейнера сервлетов. В случае нашей разработки под NetBeans авторизацию будет производить сервер GlassFish. Для авторизации заводятся realm и, в процессе авторизации, достаются группы пользователя.

Настроить realm и группы пользователя можно через консоль управления GlassFish.

Для проведения авторизации следует в консоли GlassFish перейти в Configurations -> server-config -> Security -> Realms создать новый realm. Пример для AD:

Свойства realm: Realm Name: ldapRealm JAAS Context ldapRealm Directory: ldap://dc.example.com:389 Base DN: dc=campus,dc=example,dc=com

Дополнительные свойства realm (Additional Properties): search-filter: (&(objectClass=user)(sAMAccountName=%s)) group-search-filter: (&(objectCategory=group)(member=%d)) java.naming.referral: follow search-bind-dn: cn=proxy,cn=Users,dc=campus,dc=example,dc=com search-bind-password: binduserpassword



Кроме указания вручную, возможен вариант заполнения того же самого через файл domain.xml

Для вступления изменений в силу надо перезагрузить сервер.

Полученные группы сопоставляются с ролями приложения. Сопоставление групп GlassFish с ролями в приложении описывается в файле glassfish-web.xml примерно так:

 Users Users Users   guest guest guest 

Какие ресурсы (url) и каким ролям разрешены задается в файле web.xml

В случае использования формы отправки логина и пароля, можно перейти в web.xml в визуальный режим редактирования и во вкладке безопасность занести:

Настройки входа -> формирование: формирование страницы входа: login.jsp формирование страницы ошибки: login.jsp Имя области: ldapRealm

Роли безопасности - здесь надо создать роли, скажем Users, guest...

Ограничения безопасности - здесь вводятся маски url, на которые будет требоваться аутентификация и можно задать каким ролям возможен доступ (авторизация). Например: можно добавить ресурс Имя: private.jsp Шаблон URL-адреса: /private.jsp

Для необходимости авторизации надо отметить "Включить ограничение проверки подлинности"

Для отображения имени пользователя на index.jsp можно добавить: <%= request.getRemoteUser %>