2008/09/11

Использование LDAP-базы пользователей в Tomcat

Для аутентификации и авторизации в Tomcat очень удобно использовать LDAP-директорию. Для примера можно рассмотреть доступ к manager'у приложений, который идёт в комплекте с Tomcat (http://servername:port/manager/html). Данное приложение пропускает только тех пользователей, которые прошли аутентификацию и имеют роль manager.
Прежде всего необходимо подготовить LDAP-директорию, она должна иметь примерно такую структуру
dn: o=My Organization,c=RU
o: My Organization
objectClass: organization
objectClass: top

dn: ou=People,o=My Organization,c=RU
objectClass: top
objectClass: organizationalUnit
ou: People

dn: uid=user3,ou=People,o=My Organization,c=RU
objectClass: top
objectClass: person
objectClass: organizationalPerson
objectClass: inetOrgPerson
sn: Test
uid: user3
userPassword: password3
cn: User 3

dn: uid=user2,ou=People,o=My Organization,c=RU
cn: User 2
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
sn: Test
uid: user2
userPassword: password2

dn: ou=groups,o=My Organization,c=RU
objectClass: organizationalUnit
objectClass: top
ou: groups

dn: cn=manager,ou=groups,o=My Organization,c=RU
cn: manager
objectClass: groupOfUniqueNames
objectClass: top
uniqueMember: uid=user3,ou=People,o=My Organization,c=RU
После этого в конфигурационном файле TOMCAT_HOME/server.xml необходимо закомментировать использование ресурса UserDatabase и UserDatabaseRealm, вместо него добавить
<realm classname="org.apache.catalina.realm.JNDIRealm"
connectionurl="ldap://LDAP_SERVER"
rolebase="ou=groups,o=My Organization,c=RU"
rolename="cn"
rolesearch="(uniqueMember={0})"
userpattern="uid={0},ou=People,o=My Organization,c=RU"/>

и перезапустить Tomcat.
Если всё получилось, доступ к ресурсу http://servername:port/manager/html будет иметь только пользователь user3, пользователь user2 хоть и пройдет аутентификацию, но доступа к ресурсу не получит, так как не включен в группу manager (не имеет данной роли).