Single-Sign-On (SSO) für die OTRS-Weboberfläche
Single-Sign-On für die OTRS-Weboberfläche heißt: Der Anwender wird beim Aufruf der OTRS-Weboberfläche aus dem Browser heraus automatisch authentifiziert, eine Passwortabfrage findet nicht mehr statt.
Diese Anleitung beschreibt die Konfiguration einer solchen Umgebung in einer Windows Domäne und einem SLES Server mit installiertem OTRS.
1. Kerberos Installation
Das Modul mod_auth_kerb installieren:
OTRS:~ # zypper install apache2-mod_auth_kerb
Das Paket krb5-client installieren
OTRS:~ #zypper install krb5-client
2. Keytab für Apache erstellen
Für die Authentifizierung von Apache muss ein sogenanntes keytab generiert werden.
Dieses setzt sich zusammen aus dem Protokoll (HTTP), dem Fully Qualified Domain Name des OTRS Servers und dem Realm der Domäne. Das Protokoll und der Domänen-Realm müssen groß geschrieben werden.
Desweiteren wird ein Domänenbenutzer benötigt, an den das keytab gebunden wird. Der Benutzer muss über keine besonderen Rechte verfügen.
Im folgenden Beispiel dient als
FQDN = otrsserver.domain1.net
Realm = DOMAIN1.NET
Domänenbenutzer = OTRSUSER
Auf dem Domain Controller in der Kommandozeile ins Support Tools Verzeichnis (in der Regel C:\Programme\Support Tools) wechseln und folgenden Befehl ausführen:
ktpass -princ HTTP/otrsserver.domain1.net@DOMAIN1.NET -mapuser DOMAIN1\OTRSUSER -pass xxxxxxxxx -out c:\temp\otrsserver.keytab
Das erstellte keytab ins Apache Verzeichnis /etc/apache2/keytabs des OTRS Severs kopieren.
3. Kerberos konfigurieren
Die Kerberos Konfiguration erfolgt auf dem OTRS Server unter /etc/krb5.conf
Im folgenden Beispiel wird Kerberos für zwei Domänen DOMAIN1 und DOMAIN2 konfiguriert.
Im Abschnitt [libdefaults] muss das Domain-Realm groß geschrieben werden. Im Abschnitt [realms] definiert man die einzelnen Realms der Domänen mit ihren Domänencontrollern.
[libdefaults]
default_realm = DOMAIN1.NET
[realms]
DOMAIN1.NET = {
kdc = dc1.domain1.net
kdc = dc2.domain1.net
admin_server = dc1.domain1.net
}
DOMAIN2.NET = {
kdc = dc3.domain2.net
kdc = dc4.domain2.net
admin_server = dc3.domain2.net
}
[domain_realm]
.domain1.net = DOMAIN1.NET
domain1.net = DOMAIN1.NET
.domain2.net = DOMAIN2.NET
domain2.net = DOMAIN2.NET
4. Apache konfigurieren
Folgende Eintrage müssen in /etc/apache2/conf.d/otrs.conf hinzugefügt werden:
LoadModule auth_kerb_module usr/lib/apache2/modules/mod_auth_kerb.so
<Directory "/opt/otrs/bin/cgi-bin/">
AllowOverride None
AuthType Kerberos
AuthName "OTRS"
Krb5Keytab /etc/apache2/keytabs/otrsserver.keytab
KrbAuthRealms DOMAIN1.NET DOMAIN2.NET
KrbMethodNegotiate on
KrbSaveCredentials off
KrbMethodK5Passwd on
Require valid-user
Order allow,deny
Allow from all
</Directory>
Mit LoadModule auth_kerb_module usr/lib/apache2/modules/mod_auth_kerb.so sorgt man dafür, dass das Modul mod_auth_kerb gestartet wird. Das auf dem Domänencontroller erstellte keytab gibt man unter Krb5Keytab an. Unter KrbAuthRealms gibt man die Domain-Realms an, mehrere trennt man mit einem Leerzeichen.
Anschließend muss das Modul mod_auth_kerb mit folgendem Befehl aktiviert werden:
OTRS:~ # a2enmod auth_kerb
5. OTRS Konfiguration
Um die SSO Authentifizierung im OTRS zu implementieren, muss das HTTPBasicAuth Modul aktiviert werden. Dazu müssen folgende Einträge in der /opt/otrs/Kernel/Config.pm gemacht werden.
Für die Authentifizierung der Agenten per SSO ist folgender Eintrag zuständig:
$Self->{'AuthModule'} = 'Kernel::System::Auth::HTTPBasicAuth';
$Self->{'AuthModule::HTTPBasicAuth::ReplaceRegExp'} ='@DOMAIN1.NET';
Für die Authentifizierung der Customer sieht der Eintrag wie folgt aus:
$Self->{'Customer::AuthModule'} = 'Kernel::System::CustomerAuth::HTTPBasicAuth';
$Self->{'Customer::AuthModule::HTTPBasicAuth::ReplaceRegExp'} ='@DOMAIN1.NET';
Um die Authentifizierung Agenten mehrerer Domänen zu ermöglichen, muss für jede Domäne ein eigener Eintrag gemacht werden. z.B. für DOMAIN1 und DOMAIN2
$Self->{'AuthModule'} = 'Kernel::System::Auth::HTTPBasicAuth';
$Self->{'AuthModule::HTTPBasicAuth::ReplaceRegExp'} ='@DOMAIN1.NET';
...
$Self->{'AuthModule1'} = 'Kernel::System::Auth::HTTPBasicAuth';
$Self->{'AuthModule::HTTPBasicAuth::ReplaceRegExp1'} ='@DOMAIN2.NET';
...
Gleiches gilt für die Customer Authentifizierung.
Desweiteren muss für Agenten aus der DOMAIN2 in /Kernel/System/Auth/HTTPBasicAuth.pm folgender Eintrag hinzugefügt werden:
# regexp1 on login
my $ReplaceRegExp = $Self->{ConfigObject}->Get(
'AuthModule::HTTPBasicAuth::ReplaceRegExp1' . $Self->{Count},
);
if ($ReplaceRegExp) {
$User =~ s/$ReplaceRegExp1/$1/;
}
und für die Customer aus der DOMAIN2 wird der folgende Eintrag in
/Kernel/System/CustomerAuth/HTTPBasicAuth.pm hinzugefügt:
# regexp1 on login
my $ReplaceRegExp1 = $Self->{ConfigObject}->Get(
'Customer::AuthModule::HTTPBasicAuth::ReplaceRegExp1' . $Self->{Count},
);
if ($ReplaceRegExp1) {
$User =~ s/$ReplaceRegExp1/$1/;
}
6. Troubleshooting
Der HTTP-Fehler 400 Bad Request „Size of a request header field exceeds serverlimit.“ im Internet Explorer lässt sich durch den Eintrag LimitRequestFieldSize 16384 in /etc/apache2/httpd.conf beheben.