phpIPAM Authentifizierung über Microsoft AD FS

Das Thema Identity Provider (IdP) rückt immer mehr in den Fokus/Vordergrund. In dem folgenden Artikel beschreibe ich, wie die Anmeldung am Open Source IP Address Management phpIPAM über Microsoft Active Directory Ferderation Service (AD FS) zu konfigurieren ist.

Umgebung

– AD FS: Windows Server 2012R2 Standard (Patchstand: September2018)
– phpIPAM: GitHub (Branch 1.4), Ubuntu 18.04.4 LTS (Apache2, MariaDB)
– Beide Anwendungen sind mit einem gültigen SSL-Zertifikat von der eigenen Zertifizierungsstelle versehen.

phpIPAM aktualisieren

Als erstes ist sicherzustellen, dass phpIPAM und dessen Submodule auf dem neusten Stand sind. Ich greife dazu auf git zurück.

cd /var/www/phpipam
git pull
git checkout -b 1.4 origin/1.4
git submodule update --init --recursive

Zudem habe ich das Feature Pretty URL in den Einstellungen von phpIPAM aktiviert.

Konfiguration von AD FS

Auslesen des Bezeichners des Verbunddienstes

Die Adresse im Feld „Bezeichner des Verbunddienstes“ in einen Texteditor/Notepad(++) kopieren. Diese wird später für die Konfiguration von phpIPAM benötigt.

Einrichten der Vertrauensstellungen

Für die gerade angelegte Vertrauensstellung müssen nun Regeln definiert werden. Darüber wird ein Mapping der Attribute zwischen Active Directory und SAML/phpIPAM umgesetzt. Nachstehend hat ihr die Möglichkeit die Authentifizierung mit Hilfe a) des User Principal Name (Beispiel daniel@ad.wydler.eu) umzusetzen oder b) des klassischen Benutzername (sAMAccountName) umzusetzen. Die Bilderserie für die letzte Variante findet ihr weiter unten.

Regeln für die Authentifizierung über User Principal Name (UPN)

Regeln für die Authentifizierung über sAMAccountName

Quellcode der Regel:

Get Stripped sAMAccountName

c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
 => issue(store = "Active Directory", types = ("urn:strippedaccountname"), query = ";sAMAccountName;{0}", param = c.Value);

 

Quellcode der Regel:

Transform Stripped sAMAccountName to Name ID

c:[Type == "urn:strippedaccountname"]
 => issue(Type = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value, ValueType = c.ValueType, Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"] = "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified");

Standardmäßig übergibt Microsoft AD FS nicht nur den Benutzernamen, sondern auch NetBIOS Domain Name des Active Directory (z.B. LAB01\wydler.daniel). Durch die beiden benutzerdefinierten Regeln wird nur der Benutzername transformiert.

Auslesen des Fingerabdrucks des Zertifikats vom ADFS

Das Auslesen des Fingerabdrucks des verwendeten Zertifikats für den ADFS erfolgt bequem über OpenSSL unter Ubuntu.

openssl s_client -showcerts -connect ipam.lab01.wydler.eu:443 </dev/null 2>/dev/null|openssl x509 -outform PEM > adfsserver.crt
openssl x509 -in adfsserver.crt -noout -sha256 -fingerprint
rm adfsserver.crt
  • Die Ausgabe bzw. den Fingerabdruck in einer neuen Zeile im Editor zwischenspeichern. Dieser ist später für die Konfiguration von SAML in phpIPAM notwendig.
  • Falls das verwendete Zertifikat auf dem ADFS-Server noch mit sha1 ausgestellt wurde, ist der Algorithmus auf -sha1 anzupassen.

Konfigurationsanpassung in phpIPAM

Authentifizierungsmethode anlegen

Zuerst ist eine neue Authentifizierungsmethode vom Typ SAML anzulegen.

Nachstehend nochmals die Werte des verschiedenen Felder in Textform:

http://adfs.lab01.wydler.eu/adfs/services/trust
https://adfs.lab01.wydler.eu/adfs/ls/IdpInitiatedSignOn.aspx
https://adfs.lab01.wydler.eu/adfs/ls/?wa=wsignout1.0
A0:AD:D3:9F:E4:67:53:02:D0:D1:80:89:97:62:59:F":D5:D3:46:44:42:ED:56:E9:02:CC:71:0A:D2:27:A8:30
  • Falls das verwendete Zertifikat auf dem ADFS-Server noch mit sha1 ausgestellt wurde, ist der Wert des Feldes auf sha1 zu ändern.
  • Die erste Zeile ist durch die URL aus dem ersten Abschnitt „Auslesen des Bezeichners des Verbunddienstes“ zu ersetzen.
  • Die letzte Zeile ist der Fingerabdruck des Zertifikats aus dem vorletzten Abschnitt.
  • In allen Zeilen ist natürlich noch der FQDN anzupassen.

Die neue Authentifizierungsmethode mit Bearbeiten abspeichern.

Nun sind ist noch eine Anpassung einer Konstante in der config.php notwendig. Diese kann leider bisher nicht über die Weboberfläche von phpIPAM angepasst werden. Ich edierte die Datei über eine SSH-Verbindung und mit vim.

if(!defined('MAP_SAML_USER'))
define('MAP_SAML_USER', true);    // Enable SAML username mapping

ändern zu

if(!defined('MAP_SAML_USER'))
define('MAP_SAML_USER', false);    // Enable SAML username mapping

Die Änderung speichern und die Datei wieder schließen.

Benutzer anlegen bzw. ändern

Je nachdem ob sich der Benutzer mit dem UPN oder sAMAccountName muss der entsprechende Benutzername gewählt werden. In meiner Umgebung habe ich mich für Variante B) entschieden.

Automatische Weiterleitung der Anmeldemaske

Trotz der Verwendung der Authentifizierungsmethode ‚SAML2‘ erscheint beim Aufruf von phpIPAM im Browser wie gewohnt die Standard Anmeldeseite. Am Ende der Anmeldemaske wird der Link zur alternativen Anmeldemethode angezeigt. Das Verhalten lässt sich in den Einstellungen der Anwendung nicht ändern.

Daher ist eine Ergänzung direkt im Quellcode der Anwendung nötig (Quelle). Dazu die Datei /app/login/index.php in einem Editor/Notepad(++) öffnen. Ab Zeile 15 folgenden Codeblock einfüngen:

else if ($_COOKIE['phpipamredirect'] != "/admin") {
    header("Location: ".create_link("saml2") );
}

Die Änderungen speichern und die Datei schließen. Abschließend die Anmeldeseite aktualisieren. Es erscheint ab sofort die Anmeldemaske vom AD FS.

Somit ist die Konfiguration für AD FS und phpIPAM erfolgreich abgeschlossen.
Viel Spaß beim Ausprobieren. 🙂

History

10.04.2020, 14:47 Uhr Überarbeitung des Artikels – Anordnung der Bilder geändert, Inhaltsverzeichnis angelegt.
10.04.2020, 15:44 Uhr Abschnitt „Automatische Weiterleitung der Anmeldemaske hinzugefügt.

 

Abonnieren
Benachrichtige mich bei
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
Back to top