GlassFish Security mit FileRealm

Um eine Anwendung im J2EE Server GlassFish vor unberechtigtem Zugriff zu schützen, sind im J2EE Standard die sogenannten Realms vorgesehen. Nach der Installation des GlassFish stehen schon 3 vorgefertigte Realms zur Verfügung.

1. file
com.sun.enterprise.security.auth.realm.file.FileRealm
2. admin-realm
com.sun.enterprise.security.auth.realm.file.FileRealm
3. certificate
com.sun.enterprise.security.auth.realm.certificate.CertificateRealm

In diesem Beitrag werden ich anhand des “com.sun.enterprise.security.auth.realm.file.FileRealm” beschreiben, wie man eine Web-Anwendung mit einem Zugriffsschutz belegt und so vor unautorisiertem Zugriff schützt.

Als erstes verbindet man sich mit der System Application Server Admin Console des GlassFish und prüft hier, ob unter “Configuration -> Security -> Realms” folgender Eintrag vorhanden ist:

“file | com.sun.enterprise.security.auth.realm.file.FileRealm”

Die Konfiguration für den File Realm sieht folgendermaßem aus:

Dieser Eintrag sollte in jedem Fall vorhanden sein. Anderenfalls muss man mit der Funktion “New” einen neuen FileRealm mit dem Namen “file” anlegen. Ist der Eintrag vorhanden, kann man unter “Configuration -> Security -> Realms -> file” mit der Funktion “Manage Users” die Benutzer anlegen, löschen und auch bearbeiten. Da nach der Installation des Glassfish keine User in dem FileRealm vorhanden sind, muss mindestens ein User angelegt werden.
Nachdem der Benutzer angelegt wurde, kann man in der Datei “${com.sun.aas.instanceRoot}/config/keyfile” den Benutzer und das verschlüsselte Passwort finden. In meinem Fall ist das Verzeichnis “${com.sun.aas.instanceRoot}” auf d:\JavaCAPS6\appserver\domains\domain1\ gemappt. Der Eintrag in der Datei ist eine Zeile lang und beginnt mit dem Benutzernamen. Nach dem Namen folgt ein Trennzeichen und dann das Passwort. Nach dem Passwort folgt ein weiteres Trennzeichen hinter dem noch die Gruppe(n) des Users aufgelistet sein können. Folgendes Beispiel zeigt den Benutzer Michael mit dem Passwort Michael ohne irgendeine Gruppenzugehörigkeit.

Beispiel:
Michael;{SSHA}l3AK/5D9rzFCfw6WzbrOCLvw809RSTujORokCQ==;

Das Passwort wird hier natürlich nicht im Klartext hinterlegt. Es ist ein SSHA Hash. So ein Hash kann nicht mehr in das Klartext Passwort zurück gewandelt werden, auch wenn es Tools (wie z.B. John the Ripper) gibt, die mit einer Brute Force Attacke und entsprechender Rechenzeit den Passwort-Hash in ein Klartextpasswort umwandeln können.

Nachdem nun also der Benutzer Michael dem GlassFish bekannt gemacht wurde, muss nur noch im Code der Anwendung geprüft werden, ob es sich um einen gültigen Benutzer handelt. Bei Web Anwendungen ist dies im einfachsten Fall mit einem Eintrag in der web.xml umzusetzen. In dem Fall wird beim Aufruf der geschützten Webseiten ein Popup Fenster geöffnet, dass zur Eingabe von Login und Passwort auffordert.

Möchte man allerdings ein Login Formular in das Webdesign der Anwendung integrieren, ist ein etwas höherer Aufwand nötig und es bedarf einiger Anpassungen im Java Code der Wep-Applikation.

Als erstes muss man in der Klasse in der die Überprüfung von Benutzername und Passwort stattfinden soll, die Klasse “com.sun.enterprise.security.auth.realm.file.FileRealm;” importieren.

Die Klasse ist im dem JAR File appserv-rt.jar enthalten. Zum kompilieren muss das JAR File im CLASSPATH stehen.

Der eigentliche Code zum Prüfen des Benutzers ist dann nur noch ein paar Zeilen Code.

boolean validLogin = false;
try {
FileRealm realm = (FileRealm)com.sun.enterprise.security.auth.realm.file.FileRealm.getInstance(“file”);
grpList = realm.authenticate(login, password);
if (grpList == null) { // JAAS behavior
validLogin = false;
} else {
validLogin = true;
}
} catch (NoSuchRealmException ex) {
// TODO: Exception Handling
}

Mit dem Codeschnipsel kann man nun Login und Passwort gegen die Einträge im keyfile prüfen. praktischer weise bekommt man im Falle eines gültigen Users auch noch ein String Array zurück, in dem die Gruppen aufgelistet sind, in denen sich der Benutzer befindet. So kann man auch gleich noch dir Gruppenzugehörigkeit prüfen, falls das nötig ist.

Weitere Infos zu dem Thema gibt es unter http://java.sun.com/j2ee/1.4/docs/devguide/dgsecure.html.

Michael Jentsch

Michael Jentsch arbeitet seit 2006 bei der Itellium Services GmbH als Entwickler und Software Architekt. Er ist spezialisiert auf Java basierte Web-Applikationen und E-Commerce. Neben dem Beruf interessiert er sich auch für Suchmaschinenoptimierung und ist engagiert in vielen Open Source Projekten im Web Umfeld. Sie erreichen ihn per E-Mail unter [email protected].

More Posts

Weiterführende Themen:

  1. GlassFish Installation
  2. Clickheat – Analysetool für Klicks
  3. Enterprise PHP 5