Authentifizierung

CMS Fiona unterstützt drei Methoden für die Authentifizierung von Benutzern des Redaktionssystems:

  1. Anmeldeformular (Standardeinstellung)
  2. Basic Authentication
  3. Single Sign-On über Kerberos

1. Anmeldeformular

Für die Standardeinstellung ist keine weitere Konfiguration erforderlich.

2. Basic Authentication

Bei dieser Methode ist es erforderlich, die Konfiguration in der Datei CMS_INSTANCE_DIR/webapps/GUI/WEB-INF/acegi.xml anzupassen.

Deaktivieren Sie bitte den Standard-Abschnitt (Formbased Authentication) und aktivieren Sie stattdessen den Basic Authentication-Abschnitt in der acegiFilterChain. Deployen Sie anschließend die GUI-Webapp.

3. Single Sign-On (SSO) über Kerberos

Passen Sie bei Single Sign-on mittels Kerberos bitte ebenfalls die Konfiguration in der Datei CMS_INSTANCE_DIR/webapps/GUI/WEB-INF/acegi.xml an, um SSO-Authentifizierung zu verwenden. Aktivieren Sie den Remote User-Abschnitt in der acegiFilterChain. Auch hier deaktivieren Sie bitte den Standard-Abschnitt (Formbased Authentication). CMS Fiona versucht dann, die Anmeldedaten aus der Server-Variablen REMOTE_USER auszulesen. Bei erfolgreicher Kerberos-Authentifizierung (mittels mod_auth_kerb) hinterlegt der Apache das Login in dieser Variablen.

Wird mod_proxy im Apache verwendet, um Anfragen an den Trifork und das darin laufende Fiona GUI weiterzuleiten, so wird die REMOTE_USER-Variable nicht vom Apache an den Trifork durchgereicht. Bei Verwendung von mod_proxy ist es daher notwendig, zusätzlich auch die Konfiguration des Apaches und der Fiona GUI-Webapp zu erweitern.

Apache (nur bei Verwendung von mod_proxy)

Für die Übergabe des REMOTE_USER wird ein zusätzlicher Header im Apache benötigt. In diesem wird der Wert der Variablen hinterlegt, sodass die GUI-Webapp ihn ermitteln kann.

In der folgenden exemplarischen Konfiguration (unterer Teil) wird der REMOTE_USER in der Header-Variaben NPS_REMOTE_USER hinterlegt. Sie können dem Header einen beliebigen anderen gültigen Namen geben.

<VirtualHost *:80>
  ...
  <Proxy *>
    AddDefaultCharset Off
    Order deny,allow
    Allow from all
    AuthType Kerberos
    AuthName "Kerberos Login"
    KrbServiceName HTTP
    KrbAuthRealms DIE.DOMAIN.DE
    Krb5KeyTab /etc/apache2/my.keytab
    KrbMethodK5Passwd On
    KrbMethodNegotiate On
    require valid-user
  </Proxy>

  ProxyPass /default/NPS http://localhost:8080/default/NPS
  ProxyPassReverse /default/NPS http://localhost:8080/default/NPS

  RewriteEngine On
  RewriteCond %{LA-U:REMOTE_USER} (.+)
  RewriteRule . - [E=RU:%1,NS]
  RequestHeader set NPS_REMOTE_USER %{RU}e
  RequestHeader unset Authorization
  ...
</VirtualHost>

GUI-Webapp (nur bei Verwendung von mod_proxy)

Ab Version 7 enthält CMS Fiona einen Filter namens RemoteUserInjectingFilter. Mit Hilfe dieses Filters ist es möglich, den REMOTE_USER aus der zuvor im Apache definierten Header-Variablen aus dem Request auszulesen. So kann das Fiona GUI auch bei Verwendung von mod_proxy an die Login-Daten gelangen und diese auswerten.

Der RemoteUserInjectingFilter wird in der Datei CMS_INSTANCE_DIR/webapps/GUI/WEB-INF/web.xml aktiviert. Bitte stellen Sie sicher, dass in der Konfiguration des Filters auf den Header verwiesen wird, der vom Apache in die Requests eingefügt wird, in diesem Beispiel also NPS_REMOTE_USER.

<filter>
  <filter-name>RemoteUserInjectingFilter</filter-name>
  <filter-class>com.infopark.libs.http.RemoteUserFromHeaderInjectingFilter</filter-class>
  <init-param>
    <param-name>header</param-name>
    <!-- Attention: A client must not be able to provide this header's value -->
    <param-value>NPS_REMOTE_USER</param-value>
  </init-param>
  <init-param>
    <param-name>standardRemoteUserConsideration</param-name>
    <!-- possible values (default: ignore):
      - prefer:   REMOTE_USER is used, fallback to header value
      - fallback: header value is used, fallback to REMOTE_USER
      - ignore:   header value is used only
    -->
    <param-value>prefer</param-value>
  </init-param>
</filter>
...
...
<filter-mapping>
  <filter-name>RemoteUserInjectingFilter</filter-name>
  <url-pattern>/*</url-pattern>
  <dispatcher>REQUEST</dispatcher>
  <dispatcher>ERROR</dispatcher>
</filter-mapping>
Sicherheitshinweise
  1. Die Ports des Application Servers (8080, 8443) dürfen unter keinen Umständen "von außen" erreichbar sein. Wäre dies der Fall, könnte man in Kenntnis des Header-Namens jede Benutzer-Identität annehmen, indem man einen Request mit dem Header-Namen, der auf den gewünschten User gesetzt wurde, direkt an den Application Server sendet.
  2. Alle (weiteren) Zugangswege zum Application Server (lies: Apache) müssen dafür sorgen, dass sie die volle Kontrolle über den Header-Wert haben, also insbesondere keinen Wert "von außen" passieren lassen.
Allgemeine Hinweise bei der Verwendung von AD

ADS ignoriert Groß-/Kleinschreibung bei Anmeldenamen, das CMS jedoch nicht. Um Konflikten mit der Groß-/Kleinschreibung der Anmeldenamen vorzubeugen, sollte bei Verwendung von AD-Servern der LowercaseTransformer verwendet werden. Dabei handelt es sich um einen loginTransformer, mit dem Logins vor der Übergabe an das CMS in Kleinschreibung umwandelt werden kann. Voreingestellt ist dieser nicht in Gebrauch. Um ihn zu nutzen, bearbeiten Sie bitte die GUI-Datei CMS_INSTANCE_DIR/webapps/GUI/WEB-INF/acegi.xml. Entfernen Sie im Bean abstractAuthenticationProvider die Kommentarzeichen bei der loginTransformer-Angabe:

<bean id="abstractAuthenticationProvider" abstract="true">
  <property name="loginTransformer">
    <bean class="com.infopark.libs.util.LowercaseTransformer"/>
  </property>
</bean> 

Deployen Sie abschließend das GUI neu, damit die Änderungen wirksam werden.