Mithilfe des Active Directory Authentication Server (AD Auth Server) kann eine Authentifizierung mithilfe eines lokalen Active Directories stattfinden. Der Server wird für den Identity Provider benötigt, um eine Anmeldung mit den Anmeldedaten aus dem Schulnetzwerk zu ermöglichen.
Anfrage:
{
"action": "ping"
}
Antwort:
{
"success": true
}
Anfrage:
{
"action": "auth",
"username": "[email protected]",
"password": "secret-password"
}
Antwort (Anmeldung erfolgreich):
{
"success": true,
"username": "[email protected]",
"firstname": "Max",
"lastname": "Mustermann",
"display_name": "Mustermann, Max",
"ou": "OU=Students,DC=schulit,DC=lokal",
"groups": [
"Students",
"8A"
]
}
Antwort (Anmeldung nicht erfolgreich):
{
"success": false,
"username": null,
"firstname": null,
"lastname": null,
"display_name": null,
"ou": null,
"groups": [ ]
}
Mit dieser Funktion ist es möglich, dass der Benutzer das Passwort eigenständig ändert. Voraussetzung ist, dass das alte Passwort bekannt ist.
Anfrage:
{
"action": "change_password",
"username": "[email protected]",
"old_password": "altesPW",
"new_password": "neuesPW"
}
Antwort:
{
"success": true|false,
"message": "Information über den Status der Anfrage (Fehlermeldung oder Erfolg)"
}
Mit dieser Funktion kann ein Benutzer mit entsprechenden Rechten (s.u.) das Passwort eines Benutzers zurücksetzen.
Anfrage:
{
"action": "reset_password",
"username": "[email protected]",
"new_password": "neuesPW",
"admin_username": "[email protected]",
"admin_password": "yourSecretPassword"
}
Antwort:
{
"success": true|false,
"message": "Information über den Status der Anfrage (Fehlermeldung oder Erfolg)"
}
Die Installationsdateien findet man unter Releases.
Damit der Server die Daten aus dem Active Directory auslesen kann, muss ein normaler AD-Benutzer angelegt werden (kein Administrator o.ä.). OU und Gruppen-Mitgliedschaften sind egal.
Möchte man auch Passwörter zurücksetzen können, wird ein Account mit entsprechender Berechtigung benötigt. Das sind u.a. auch Domänenadmins, allerdings wird nicht empfohlen, diesen Account zum Zurücksetzen von Passwörtern zu verwenden. Stattdessen sollte ein separater normaler Benutzer (kein Administrator o.ä.) angelegt werden (dessen Anmeldeinformationen auch an die Lehrkraft verteilt wird, die Passwörter zurücksetzen darf). Anschließend muss diesem Benutzer das Recht zum Zurücksetzen von Passwörtern erteilt werden. Dazu in "Active Directory Benutzer- und Computer" die OU auswählen, in der Passwörter zurückgesetzt werden dürfen sollen:
- Rechtsklick auf die OU -> Aufgaben -> Objektverwaltung zuweisen
- Den Benutzer auswählen, der Passwörter zurücksetzen darf
- Aufgabe "Setzt Passwörter zurück und erzwingt Kennwortänderung bei der nächsten Anmeldung"
- Bestätigen
Um die Verbindung zwischen Client und dem Server zu verschlüsseln, sollte man TLS im Server aktivieren. Dazu benötigt es jedoch ein Zertifikat, welches man entweder mit OpenSSL oder ADCS erzeugen kann (im Grunde geht aber auch jede andere Möglichkeit).
Folgendes Kommando erzeugt ein selbst-signiertes Zertifikat mithilfe von OpenSSL. Das Zertifikat ist 10 Jahre gültig. Die "PEM pass phrase" sollte leer gelassen werden.
$ openssl genrsa -out private.pem 4096
$ openssl req -x509 -new -key private.pem -out public.pem -days 3650
Beispiel:
PS C:\ProgramData\SchulIT\AD Auth Server> openssl genrsa -out private.pem 4096
Generating RSA private key, 4096 bit long modulus (2 primes)
................................++++
........................++++
e is 65537 (0x010001)
PS C:\ProgramData\SchulIT\AD Auth Server> openssl req -x509 -new -key private.pem -out public.pem -days 3650
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:Nordrhein-Westfalen
Locality Name (eg, city) []:Aachen
Organization Name (eg, company) [Internet Widgits Pty Ltd]:SchulIT
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:dc01.schulit.lokal
Email Address []:[email protected]
Info: Die eingetragenen Werte sollten nach eigenem Belieben angepasst werden (die Werte sind im Grunde egal). Es empfiehlt sich, als Common Name
den Computernamen (samt Domäne) einzutragen.
Anschließend muss noch eine PFX-Datei erstellt werden, die der Server einlesen kann. Sie enthält den privaten Schlüssel sowie das Zertifiakt:
$ openssl pkcs12 -export -in public.pem -inkey private.pem -out server.pfx
Das Kommando fragt ein Export Password
ab. Dieses wird genutzt, um das Zertifikat und den privaten Schlüssel in der PFX-Datei zu verschlüsseln. Es muss später auch in der Konfigurationsdatei hinterlegt werden.
Anschließend die Datei private.pem
löschen! Die Datei public.pem
kann, muss aber nicht gelöscht werden.
Die Datei server.pfx
kann in einem beliebigen Verzeichnis liegen. Es empfiehlt sich, sie im Verzeichnis C:\ProgramData\SchulIT\AD Auth Server
abzulegen.
TODO :-)
Die Konfiguration des Servers wird in der Datei settings.json
vorgenommen, welche sich im Verzeichnis C:\ProgramData\SchulIT\AD Auth Server
befindet. Alternativ kann die Konfiguration über die GUI vorgenommen werden (Startmenü: AD Auth Server > AD Auth Server GUI).
Ist dieser Wert auf true
, so lauscht der Server nur auf IPv6-Anfragen. Ist er false
, so lauscht er auf IPv4-Anfragen (Standard).
Legt den Port des Servers fest (Standard: 55117
). Achtung: Unter Windows ist gehört dieser Port zu einer Liste blockierter Ports, die nach dem Update KB4074588 entanden ist.
Legt fest, ob TLS aktiviert ist (Standard: true
). Dieser Wert sollte in einem Produktivsystem auf true
gesetzt sein.
Pfad zur PFX-Datei (s.o.), welche das Zertifikat und den zugehörigen privaten Schlüssel enthält.
Passwort für die PFX-Datei.
Hostname des Domänencontrollers.
Vollqualifizierter Domänenname
NetBIOS Name der Domäne.
Benutzername des AD Benutzers für den AD Auth Server (s.o.).
Passwort des AD Benutzers für den AD Auth Server (s.o.).
Legt fest, ob LDAP over SSL verwendet werden soll.
Legt fest, ob LDAP mit STARTTLS verwendet werden soll (empfohlen). Dies wird benötigt, wenn auch Änderungen von Passwörtern vorgenommen werden sollen.
Fingerabdruck des TLS-Zertifikats für SSL oder STARTTLS-Verbindungen.
0
: Der UPN des Benutzers wird als Benutzername verwendet (empfohlen)1
: Der sAMAccountName des Benutzers wird als Benutzername verwendet
Eine Liste von UPN-Suffixen, für die der Server Anmeldungen akzeptiert (optional). Achtung: Diese Option ist (noch) ungetestet.
Diehe Abschnitt "Konfigurationsdatei".
Der Dienst kann entweder über die GUI (Startmenü: SchulIT -> Active Directory Authentication Server Configuration Utility) aktiviert werden oder händisch unter "Dienste" in Windows.
Zu guter letzt muss noch die Port-Weiterleitung im Router eingerichtet werden.
Um die Sicherheit des Servers zu erhöhen, sollten folgende Dinge beachtet werden.
Die Konfigurationsdatei sollte so mit Berechtigungen ausgestattet werden, dass die Datei nur von Administratoren geändert und gelesen werden kann.
Der Server implementiert keine Maßnahmen, um DDos-Attacken zu verhindern. Dies sollte auf Netzwerk-Ebene geschehen.
Als ersten Schritt sollte die Port-Weiterleitung im Router so angelegt werden, dass der Port nur für die IP-Adresse(n) des Servers freigeschaltet ist, der auch tatsächlich Anfragen an den Server stellen darf.
Aktuell gibt es eine Client-Bibliothek für PHP sowie das zugehörige Bundle für Symfony.
Der Quelltext steht (abgesehen von den Icons) unter der MIT License.