Basic authenticatie met de JBoss AS

 
07 maart 2011

Voor het project SogyoSearch ben ik bezig met een test die gedraaid kan worden vanuit de browser. Ik wil deze afschermen met een gebruikersnaam en wachtwoord zodat niet iedereen er zomaar bij kan (het is namelijk een stress-test en ik wil geen DDOS aanval faciliteren ;-)). Hiervoor is een Basic authenticatie genoeg. In het verleden heb ik dit al vaker gedaan en ik had niet verwacht dat dit zo moeilijk zou zijn voor de JBoss AS.

Wat is nu het probleem? Er zijn vele voorbeelden te vinden over hoe dit gedaan kan worden met de Tomcat server, maar het is verrassend moeilijk om hier voorbeelden over te vinden voor de JBoss server. Tomcat heeft namelijk een heel makkelijk bestand genaamd “tomcat-users.xml” om gebruikersnamen te koppelen aan wachtwoorden en rollen. Ik heb toch lang gezocht, maar ik kan zo’n soort bestand toch echt niet vinden voor JBoss!

Na lang zoeken en proberen is het dan toch gelukt om dit te regelen binnen JBoss. In deze blog post zal ik uitleggen hoe ik het opgelost heb.

web.xml

In de web.xml zijn geen verrassingen te vinden:

<security-role>
  <role-name>Administrator</role-name>
</security-role>

<security-constraint>
  <web-resource-collection>
    <web-resource-name>
      test
    </web-resource-name>
    <url-pattern>
      /test.jsp
    </url-pattern>
   </web-resource-collection>
	  
  <auth-constraint>
    <role-name>Administrator</role-name>
  </auth-constraint>
</security-constraint>
    
<login-config>
    <auth-method>BASIC</auth-method>
</login-config>

Alleen de Administrator heeft toegang tot /test.jsp. Dit is allemaal leuk, maar waar stellen we nu het gebruikersnaam en wachtwoord in van deze Administrator?

login-config.xml

JBoss heeft een bestand genaamd login-config.xml. In dit bestand is het mogelijk om een applicatie policy op te zitten. Met andere woorden, je kan hier aangeven waar je applicatie de gebruikersnaam en wachtwoorden kan vinden en tot welke rol een bepaalde gebruiker behoort. Dit bestand is te vinden in JBoss server\server\default\conf\.

De volgende code heb ik toegevoegd:

<application-policy name="testpolicy">
  <authentication>
    <login-module code="org.jboss.security.auth. spi.UsersRolesLoginModule" flag="required">
      <module-option name="usersProperties">
        test-users.properties
      </module-option>
      <module-option name="rolesProperties">
	test-roles.properties
      </module-option>
    </login-module>
  </authentication>
</application-policy>

Vooral belangrijk om op te merken is dat we deze policy de naam testpolicy hebben gegeven en dat we twee bestanden hebben gedefiniëerd genaamd test-users.properties en test-roles.properties (zie de andere policies voor meer informatie).

test-users.properties

Zoals de naam al aangeeft, bevat dit bestand informatie over de gebruikers. In dit geval dus het gebruikersnaam en bijbehorende wachtwoord (ik weet het, het is niet echt bepaald veilig, maar in dit geval is het goed genoeg).

Dit bestand ziet er bij mij als volgt uit:

Admin=admin

De gebruiker Admin kan nu dus inloggen met het gebruikersnaam Admin en het wachtwoord admin.

Dit bestand dien je zelf aan te maken en moet in dezelfde map staan als login-config.xml (of in een submap daarvan, als dit als zodanig is aangegeven. Vb: test\test-users.properties).

test-roles.properties

Voor dit bestand geld hetzelfde als voor test-users.properties. Deze moet in dezelfde map komen en bevat de rollen waar een gebruiker toe behoort.

Admin=Administrator

Hier geef ik aan dat de gebruiker Admin tot de rol Administrator behoort. Administrator was al eerder in de web.xml ingesteld.

jboss-web.xml

Tot slot moet je het bestand jboss-web.xml toevoegen aan de WEB-INF map van je applicatie. Dit bestand geeft aan welke policy er gebruikt moet worden.

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
  <security-domain>
    java:/jaas/testpolicy
  </security-domain>
</jboss-web>

De naam testpolicy komt overeen met de naam in login-config.xml.

Conclusie

Achteraf gezien was het niet zo heel erg moeilijk, maar er is op internet erg weinig te vinden over hoe dit moet. Ik hoop dat het vanaf nu met deze blog makkelijker zal gaan ;-).


Werken met ?
Kijk dan bij onze mogelijkheden voor zowel starters als ervaren engineers.


Categorieën: Architectuur, Development, Deployment

Tags: , , , ,