JBoss + LDAP

post_img

Jak skonfigurować w JBossie uwierzytelnianie i autoryzację opartą o LDAP ?

Na początek przykładowa aplikacja

Na potrzeby testów stwórzmy sobie prościutką aplikację i umieśćmy ją na JBossie.

Najprościej będzie użyć do tego celu mechanizmu archetypów Mavena:

mvn archetype:generate
wybierzmy webapp-jee5
wybierzmy wersję 1.0
wskażmy groupId – np. pl.atena
wskażmy artifactId – np. ldap-integration
wskażmy version – np. 1.0-SNAPSHOT
wskażmy pakiet – np. pl.atena.ldap

Po zatwierdzeniu powinniśmy mieć gotowy do deployu projekt.

Wystarczy go zbudować

mvn clean package

i skopiować do katalogu JBOSS/server/default/deploy

Po uruchomieniu serwera i wejściu na stronę http://localhost:8080/ldap-integration powinniśmy zobaczyć „Hello World”.

Konfiguracja modułu uwierzytelniania w JBossie

Kolejnym krokiem będzie konfiguracja uwierzytelniania w JBossie. W tym celu edytujemy plik JBOSS/Server/default/login-config.xml i dodajemy w nim nową politykę bezpieczeństwa, którą nazwiemy ldap:

<application-policy name="ldap">
  <authentication>
    <login-module code="org.jboss.security.auth.spi.LdapExtLoginModule" flag="required" >
      <module-option>ldap://serwerLdap:389</module-option>
      <module-option>ATENA\ldapUser</module-option>
      <module-option>password</module-option>

      <module-option name="baseCtxDN">CN=Users,DC=companyName,DC=com</module-option>
      <module-option name="baseFilter">(sAMAccountName={0})</module-option>

      <module-option>OU=Groups,DC=companyName,DC=com</module-option>
      <module-option name="matchOnUserDN">true</module-option>
      <module-option name="uidAttributeID">member</module-option>
      <module-option name="roleFilter">(member={1})</module-option>
      <module-option name="roleAttributeID">CN</module-option>

      <module-option name="roleRecursion">2</module-option>
      <module-option name="searchScope">SUBTREE_SCOPE</module-option>

      <module-option name="allowEmptyPasswords">false</module-option>
    </login-module>
  </authentication>
</application-policy>

Wyjaśnienie najważniejszych parametrów:

  • login-module – wskazanie modułu uwierzytelniania – dla samego uwierzytelniania możemy użyć LdapLoginModule; jeśli chcemy użyć również autoryzacji opartej o LDAP musimy użyć LdapExtLoginModule
  • java.naming.provider.url – namiary na kontroler domeny
  • bindDN – nazwa użytkownika z uprawnieniami do wykonywania zapytań w LDAPie
  • bindCredential – hasło użytkownika
  • baseCtxDN – ścieżka do wyszukiwania użytkownika
  • baseFilter – filtr służący do wyszukania uwierzytelnianego użytkownika
  • rolesCtxDN – ścieżka do wyszukiwania roli
  • roleFilter – filtr służący do wyszukania roli użytkownika
  • roleAttributeID – wskazanie na miejsce w ścieżce gdzie będzie nazwa roli
  • roleRecursion – głębokość wyszukiwania roli
  • searchScope – zasięg wyszukiwania (OBJECT_SCOPE, ONELEVEL_SCOPE, SUBTREE_SCOPE)
  • allowEmptyPasswords – flaga wskazująca, czy puste hasła powinny być przekazywane do serwera LDAPa (niektóre serwery LDAP traktują puste hasło jako zalogowanie anonimowe)

Pełna lista parametrów dla modułu LdapExtLoginModeule dostępna jest pod adresem:

http://docs.redhat.com/docs/en-US/JBoss_Enterprise_Application_Platform/4.2/html/Server_Configuration_Guide/Using_JBoss_Login_Modules-LdapExtLoginModule.html

Podpięcie uwierzytelniania do aplikacji

Ostatnim krokiem jest podpięcie dodanej polityki do naszej aplikacji i zabezpieczenie dostępu do pewnych zasobów w aplikacji. W tym celu dodajemy w katalogu src/main/webapp/WEB-INF/ plik jboss-web.xml o następującej treści:

<jboss-web>
  <security-domain>java:/jaas/ldap</security-domain>
</jboss-web>

Następnie zabezpieczamy dostęp do aplikacji w pliku web.xml:

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>LDAP Restricted Zone</web-resource-name>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>administrator</role-name>
    </auth-constraint>
    </security-constraint>
    <login-config>
      <auth-method>BASIC</auth-method>
      <realm-name>LDAP Restricted Zone</realm-name>
    </login-config>
    <security-role>
      <role-name>administrator</role-name>
    </security-role>
</web-app>

Gdy ponownie wejdziemy na stronę naszej aplikacji (http://localhost:8080/ldap-integration) powinniśmy zostać zapytani o login i hasło użytkownika. Po podaniu domenowego loginu i hasła powinniśmy ponownie zobaczyć nasze ‘Hello World’ – pod warunkiem, że jesteśmy w LDAPie przypisani do grupy administrator.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *