Zum Inhalt

ADFS (Active Directory) (SAML)#

Bitte erstellen Sie vor jeder Änderung an einer Schnittstelle/Import einen vollständiges Backup. Falls das Ergebnis nicht zufriedenstellend ist kann dieses dann wiederhergestellt werden

In dieser Anleitung beschreiben wir die Einrichtung von Single-Sign-On (SSO) für i-doit mit Hilfe von SAML. In diesem Beispiel nutzen wir Mellon als Authenticator gegen LDAP-AD-FS.

Vorbereitungen#

Wir nutzen für die Beispielkonfiguration zwei Server, einen Windows Server mit Domäne/AD und FS und einen Debian 11 Server mit Apache und Mellon:

FQDN IP Rolle OS
tu2-dc2.tu-synetics.test 10.10.60.22 AD, FS Windows
tu2-samlsso.synetics.test 10.10.60.108 Apache+Mellon Debian11

Basiskonfiguration#

✔ Der Windows-Server muss ein konfiguriertes AD haben, welches die Rolle AD-FS beinhaltet.
✔ i-doit ist bereits vorinstalliert und nutzbar.

Pakete Installieren#

1
sudo apt -y install openssl libapache2-mod-auth-mellon ntpdate

Als Systemarchitektur sollte ein x86 in 64bit zum Einsatz kommen

Mellon Konfiguration#

Wir erstellen hierzu ein Verzeichnis unter /etc/apache2 und legen hier unsere Konfigurationsdaten ab.

1
2
sudo mkdir -p /etc/apache2/mellon
cd /etc/apache2/mellon

Mit folgendem Befehl erstellen wir unsere Mellon Metadaten "URLs bitte anpassen"

1
/usr/sbin/mellon_create_metadata https://tu2-samlsso.synetics.test/ "https://tu2-samlsso.synetics.test/mellon"

Dies erstellt nun folgende Dateien

https\_tu2\_samlsso.synetics.test\_.cert
https\_tu2\_samlsso.synetics.test\_.key
https\_tu2\_samlsso.synetics.test\_.xml

Nun müssen wir die AD-FS metadaten von unserem AD abholen "URLs bitte anpassen"

1
wget https://tu2-dc2.tu-synetics.test/FederationMetadata/2007-06/FederationMetadata.xml%20-O%20/etc/apache2/mellon/FederationMetadata.xml -O /etc/apache2/mellon/FederationMetadata.xml --no-check-certificate

Nun müssen wir unsere Mellon Konfiguration anlegen.

1
sudo nano /etc/apache2/conf-available/mellon.conf

Folgende Direktiven werden anhand des Beispiels eingefügt:

1
2
3
4
5
6
7
8
<Location / >
    MellonSPPrivateKeyFile /etc/apache2/mellon/https_tu2_samlsso.synetics.test_.key
    MellonSPCertFile /etc/apache2/mellon/https_tu2_samlsso.synetics.test_.cert
    MellonSPMetadataFile /etc/apache2/mellon/https_tu2_samlsso.synetics.test_.xml
    MellonIdPMetadataFile /etc/apache2/mellon/FederationMetadata.xml
    MellonEndpointPath /mellon
    MellonEnable "info"
</Location>

Apache2 Konfiguration#

Zuerst erstellen wir ein selbst signiertes Zertifikat "Name kann individuell sein"

1
openssl req -newkey rsa:3072 -new -x509 -days 3652 -nodes -out /etc/ssl/certs/mywebserver.pem -keyout /etc/ssl/private/mywebserver.key

Beispiel:

1
2
3
4
5
6
7
Country Name (2 letter code) [AU]:Your_Country
State or Province Name (full name) [Some-State]:Your_Province
Locality Name (eg, city) []:Your_City
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Your_Organization
Organizational Unit Name (eg, section) []:Your Department
Common Name (e.g. server FQDN or YOUR name) []:mywebserver.example.com
Email Address []:your_email_address

VHost erstellen:

1
sudo nano /etc/apache2/sites-available/mywebserver.conf

Beispiel:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        DocumentRoot /var/www/html
        ServerSignature Off
        ErrorLog /var/log/apache2/error.log
        CustomLog /var/log/apache2/access.log combined
        LogLevel info ssl:warn
        SSLEngine on
        SSLCertificateFile /etc/ssl/certs/mywebserver.pem
        SSLCertificateKeyFile /etc/ssl/private/mywebserver.key
    </VirtualHost>
    <Location /protected>
        Require valid-user
        AuthType "Mellon"
        MellonEnable "auth"
        MellonDecoder "none"
        MellonVariable "cookie"
        MellonSecureCookie On
    </Location>
</IfModule>

In diesem Beispiel wird unter /var/www/html nur das Verzeichnis via Mellon geschützt. Wir können also später noch eine weitere VHost Konfiguration anlegen, um z.B. i-doit zu installieren.

Anlegen des Verzeichnisses:

1
sudo mkdir -p /var/www/html/protected

Anlegen einer Beispiel html um den Aufruf später zu testen:

1
sudo nano /var/www/html/protected/index.html

Beispiel:

1
2
3
4
5
6
7
8
<html>
    <head>
        <title>Index Page</title>
    </head>
    <body>
        <h2>This simple index page will only be accessible once your users successfully sign-in via Azure AD with their valid credentials!</h2>
    </body>
</html>

Config testen:

1
sudo apache2ctl configtest

Mods, Configs aktivieren:

1
2
3
4
sudo a2enmod ssl
sudo a2enconf mellon.conf
sudo a2ensite mywebserver.conf
sudo systemctl restart apache2

Zeit synchronisieren:

1
sudo ntpdate -u tu2-dc2.tu-synetics.test

An dieser Stelle sind wir vorerst mit der Konfiguration des Linux Servers fertig und können uns jetzt unserem AD widmen.

Konfiguration AD-FS#

Zuerst via z.B. WinSCP die mellon_metadata.xml vom Linux Server herunterladen und speichern.
Anschließend öffnen wir das AD-FS Management und legen ein neuen Relying Party Trust an

Add Relying Party Trust

Claims aware bleibt aktiv und dann auf Start

Welcome

Im Nächsten Schritt wählen wir "import data …." aus und navigieren zu unserer vorher gesicherten XML

Select data source

Folgender Hinweis kann ignoriert werden, wenn er auftaucht.

AD FS Management

Nun tragen wir den FQDN von unserem Linux-Server ein.

Specify display name

Im nächsten Schritt können wir Zugriffe steuern, der Einfachheit halber belassen wir es zunächst auf Permit everyone.

Choose access control policy

Das nächste Fenster können wir auch außer Acht lassen und klicken einfach auf next.

Ready to add trust

Zum Schluss dann nur noch Close und der Party Trust ist angelegt

Finish

Nun müssen wir Claim Issuance Policies definieren, damit unser User sich auch via Mail anmelden kann.

AD FS edit claim

Nun öffnet sich ein Fenster und wir klicken auf Add Rule.

Add rule

Nun wählen wir Send LDAP Attributes as Claim aus und klicken auf Next

Choose rule type

Wir geben der Rule einen eindeutigen Namen und fügen das Mapping wie angezeigt hinzu.

Configure claim rule

Dann erstellen wir eine weitere Regel und wählen Transform an Incoming Claim

Select rule template

Bitte die Konfiguration wie folgt vornehmen:

Configure rule

Nun haben wir einen voll konfigurierten Relying Party Trust und können nun einmal die Authentifizierung testen.

Login page

Test SAML-SSO#

Einmal im Browser die URL vom Server öffnen Beispiel: https://mywebserver.example.com/protected

Nach der erfolgreichen Anmeldung sollten wir folgende Ausgabe erhalten.

Auth users only

Installation i-doit#

Die Installation kann wie im KB-Artikel für Debian beschrieben installiert werden.

Anmeldung SSO für i-doit#

Hierzu müssen wir einmal in die Administration -> System settings und passen die Konfiguration wie folgt an. Wichtige Information zu Kontakten:Es muss zwingend die E-Mail Adresse des jeweiligen Benutzers als Login im i-doit hinterlegt sein!

i-doit SSO setting

Da wir aktuell nach unserer Anleitung bzw. KB vorgegangen sind, müssen wir die VHost Konfiguration anpassen damit wir uns nun via SSO anmelden können

i-doit VHost Konfiguration deaktivieren

1
sudo a2dissite i-doit

Zu Beginn angelegte Mellon VHost Konfiguration anpassen

1
nano /etc/apache2/sites-enabled/tu2-samlsso.conf

Beispiel

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
    ServerAdmin admin@example.com
    DocumentRoot /var/www/html
            <Directory /var/www/html/>
                    AllowOverride All
            </Directory>
    ServerName  fqdn.example.com
    ServerSignature Off
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    LogLevel info ssl:warn

    SSLEngine on
    SSLCertificateFile /etc/ssl/certs/mywebserver.pem
    SSLCertificateKeyFile /etc/ssl/private/mywebserver.key
    </VirtualHost>
    <Location />
    Require valid-user
        AuthType "Mellon"
        MellonEnable "auth"
        MellonDecoder "none"
        MellonVariable "cookie"
        MellonSecureCookie On
    </Location>
</IfModule>

Zum Schluss den Apache neustarten

1
sudo systemctl restart apache2.service

Fertig!

Wenn wir nun die URL wieder in unserem Browser öffnen und uns anmelden, gelangen wir direkt zu i-doit

Fallback auf Anmeldemaske

Sollte sich ein Benutzer anmelden, der in i-doit noch nicht vorhanden ist, dann wird dieser automatisch auf die Anmeldemaske von i-doit weitergeleitet und kann sich mit einem lokalen Benutzer anmelden.