Authentisierung in Magnolia

Dieser Artikel gibt einen Überblick über die Authentisierung in Magnolia. Es wird aufgezeigt, welche Komponenten involviert sind und wie sie zusammenspielen. Das Verständnis davon ist wichtig, wenn man weitere Authentisierungssysteme ein- bzw. anbinden möchte.

Grundlagen

Grundsätzlich wird zwischen Authentisierung (Identität der Benuzters) und Autorisierung (Rechte des Benuzters) unterschieden. Innerhalb der Authorisierung geht es zum einen darum, die Berechtigungen zu definieren. In Magnolia wird dies mittels ACLs (access control list) auf JCR-Level festgelegt:

Zum anderen muss aber auch Zuordnung von ACLs zu Benutzer festgehalten werden. Dazu verwendet Magnolia folgendes Konstrukt:

Ein Benutzer kann also sowohl via Rollen als auch Gruppen zu den ACLs gelangen, die seine Berechtigungen beschrieben.

Zunächst muss ein Benutzer also authentisiert werden. Danach müssen ihm via Rollen und/oder Gruppen Rechte eingeräumt werden. Als letztes muss Magnolia die Einhaltung dieser Rechte sicherstellen.

Diesen letzte Schritt delegiert Magnolia an die JCR-Implementierung (Apache Jackrabbit). Üblicherweise macht es keinen Sinn, hier ins System einzugreifen oder dies zu erweitern.
Dasselbe gilt für die Definition von ACLs, Gruppen und Rollen. Diese Architektur sollte in den allermeisten Fällen flexibel genug sein, um die gewünschten Anforderungen abbilden zu können.

Übrig bleiben die Punkte „Authentisierung“ und „Zuordnung der ACL“. Die folgenden Abschnitte gehen darauf ein, wie dies in Magnolia bewerkstelligt werden kann.

Magnolia und JAAS

Magnolia setzt den Standard „Java Authentication and Authorization Service“ (JAAS) ein. Darin werden verschiedene Klassen, Interfaces und Prozesse definiert, um die Authentisierung und Autorisierung zu standardisieren und flexibel erweiterbar zu machen. Vertiefte Kenntnisse von JAAS sind für die Einbindung neuer Authentisierungs-Methoden aber nicht zwingend notwendig.

Komponenten

Im Folgenden werden die verschiedenen Software-Kompnenten beschrieben, welche im Authentisierungs- und Authorisierungsprozess involviert sind. Die meisten davon sind in Form von HTTP-Request-Filter umgesetzt und können via Admin-Interface unter „Configuration“ im Pfad /server/filters konfiguriert werden.

URISecurityFilter

Der URISecurity-Filter (Klasse info.magnolia.cms.security.URISecurityFilter) stellt fest, ob der aktuelle Benutzer die notwendigen Berechtigungen für aufgerufene URI besitzt. Falls nicht, wird ein entsprechender HTTP-Code (z.b. 401) gesetzt (siehe auchhttp://documentation.magnolia-cms.com/reference/filters.html#URISecurity).

Security Callback

Dieser Filter behandelt 401 und 403 HTTP-Codes sowie AccessDeniedExceptions, in dem er auf die konfigurierte Login-Seite umgeleitet. Dies kann im Admin-Interface im Modul „Configuration“ unter folgendem Pfad angepasst werden: /server/filters/securityCallback (siehe auch http://documentation.magnolia-cms.com/reference/filters.html#SecurityCallback).

Login-Filter

Der Login-Filter tritt in Aktion, um allfällige Login-Informationen aus dem Request abzugreifen und den Login durchzuführen. Dazu werden alle konfigurierten LoginHandler aufgerufen (Konfiguration unter /server/filters/login/loginHandlers).

Standardmässig sind zwei LoginHandler vordefiniert. Einer behandelt eine HTTP-Basic-Authentication und der andere den Login via dem Standard-Login-Formular. Beide extrahieren Benutzername und Passwort aus dem Request und führen damit den Login via JAAS-Framework aus.

Muss eine Authentisierung angebunden werden, für welche diese Daten nicht ausreichen (z.B. weil sie wie bei Shibboleth ausserhalb der Applikation durchgeführt wird oder bei Mehrfaktor-Authentisierung), muss ein eigener LoginHandler geschrieben werden.

Login-Module

Der im LoginHandler angestossene Login-Prozess wird in einem Login-Modul durchgeführt. Die verfügbaren Login-Module und deren Reihenfolge werden via JAAS-Konfiguration festgelegt. Diese befindet sich im Verzeichnis WEB-INF/config/jaas.config.
Das Login-Modul in im JAAS-Standard definiert (javax.security.auth.spi.LoginModule) und dafür zuständig, die Authentisierung durchzuführen.
Die notwendigen Informationen können via dem CallbackHandler abgefragt werden. Für eine Authentisierung, welche nur Benutzername und Passwort benötigt, kann auch von der Klasse info.magnolia.jaas.sp.jcr.JCRAuthenticationModule abgeleitet werden.

Die Instanzierung eines User-Objekts und die Zuordnung von Gruppen und Rollen wird in Magnolia an den UserManager delegiert.

UserManager

Der UserManager ist zuständig für die Instanzierung eines User-Objekts und die Initialisierung desselben mit Gruppen und Rollen. Es können verschiedene UserManager konfiguriert werden (unter /server/security/userManagers). Falls vom info.magnolia.jaas.sp.jcr.JCRAuthenticationModule abgeleitet wurde, wird der zu verwendende UserManager via Realm bestimmt (diese Information wird im LoginModul via CallbackHandler bestimmt).
Falls es sich beim authentisierten Benutzer nicht um einen Magnolia-Benutzer handelt, sollte der info.magnolia.cms.security.ExternalUserManager verwendet bzw. davon abgeleitet werden.

Rollen und Gruppen werden übrigens nur via deren Namen referenziert – es müssen nicht die eigentlichen Repository-Objekte verwendet werden.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>