Zum Inhalt springen

LDAP Authentication einrichten

LDAP Authentication integriert RAMP mit Unternehmensverzeichnissen wie Active Directory oder OpenLDAP. Benutzer authentifizieren sich mit ihren Verzeichnis-Anmeldedaten, und RAMP kann das Verzeichnis nach Benutzern und Gruppen durchsuchen.

  • Authentifizierung gegen LDAP/Active Directory
  • Automatische Benutzerbereitstellung bei der ersten Anmeldung
  • Verzeichnissuche nach Benutzern und Gruppen
  • Unterstützung für SSL/TLS (LDAPS)
  • Funktioniert unter Windows, Linux und Docker
  • Integration von Unternehmensverzeichnissen
  • Zentrale Benutzerverwaltung
  • Active Directory ohne Windows Auth/IIS
  • OpenLDAP-Umgebungen
  • LDAP-Server (Active Directory oder OpenLDAP)
  • LDAP-Server-Hostname/-IP und Port (389 für LDAP, 636 für LDAPS)
  • Dienstkonto für LDAP-Bind-Operationen
  • Netzwerkzugriff von RAMP zum LDAP-Server

Sie benötigen die folgenden Informationen von Ihrem LDAP-Administrator:

EinstellungBeispiel (Active Directory)Beispiel (OpenLDAP)
LDAP-Serverldap://dc.contoso.com:389ldap://ldap.company.com:389
SuchbasisDC=contoso,DC=comdc=company,dc=com
Dienstkonto-DNCN=ramp-service,OU=Service Accounts,DC=contoso,DC=comcn=ramp-bind,ou=services,dc=company,dc=com
Dienstkonto-Passwort(vom AD-Admin)(vom LDAP-Admin)
Benutzerfilter(&(objectClass=user)(objectCategory=person))(objectClass=inetOrgPerson)
Gruppenfilter(objectClass=group)(objectClass=groupOfNames)

Bearbeiten Sie appsettings.json:

{
"Authentication": {
"Providers": {
"LDAP": {
"Enabled": true,
"Server": "ldap://dc.contoso.com:389",
"SearchBase": "DC=contoso,DC=com",
"BindDn": "CN=ramp-service,OU=Service Accounts,DC=contoso,DC=com",
"BindPassword": "ServiceAccountPassword123!",
"UseSsl": false,
"UserSearchFilter": "(&(objectClass=user)(objectCategory=person)(sAMAccountName={0}))",
"GroupSearchFilter": "(objectClass=group)",
"AttributeMappings": {
"Username": "sAMAccountName",
"Email": "mail",
"FirstName": "givenName",
"LastName": "sn",
"DisplayName": "displayName"
},
"EnableDirectorySearch": true,
"AutoProvisionUsers": true
}
}
},
"Bootstrap": {
"Administrators": [
{
"IdentityProvider": "LDAP",
"Username": "admin",
"Email": "admin@contoso.com"
}
]
}
}
EinstellungErforderlichBeschreibung
EnabledJaAuf true setzen, um LDAP-Authentifizierung zu aktivieren
ServerJaLDAP-Server-URL (Format: ldap://host:port oder ldaps://host:port)
SearchBaseJaBasis-DN für alle LDAP-Suchen
BindDnJaDistinguished Name des Dienstkontos für Bind-Operationen
BindPasswordJaPasswort für das Dienstkonto
UseSslNeinLDAPS (Port 636) verwenden. Standard: false
UserSearchFilterJaLDAP-Filter zur Benutzersuche. {0} wird durch den Benutzernamen ersetzt
GroupSearchFilterNeinLDAP-Filter zur Gruppensuche
AttributeMappingsJaLDAP-Attribute auf RAMP-Benutzerfelder abbilden
EnableDirectorySearchNeinVerzeichnissuche nach Benutzern/Gruppen erlauben. Standard: false
AutoProvisionUsersNeinRAMP-Benutzer bei der ersten Anmeldung erstellen. Standard: true

{
"Authentication": {
"Providers": {
"LDAP": {
"Enabled": true,
"Server": "ldap://dc.contoso.com:389",
"SearchBase": "DC=contoso,DC=com",
"BindDn": "CN=ramp-service,OU=Service Accounts,DC=contoso,DC=com",
"BindPassword": "ServiceAccountPassword123!",
"UseSsl": false,
"UserSearchFilter": "(&(objectClass=user)(objectCategory=person)(sAMAccountName={0}))",
"GroupSearchFilter": "(objectClass=group)",
"AttributeMappings": {
"Username": "sAMAccountName",
"Email": "mail",
"FirstName": "givenName",
"LastName": "sn",
"DisplayName": "displayName"
},
"EnableDirectorySearch": true,
"AutoProvisionUsers": true
}
}
}
}

Das Dienstkonto benötigt:

  • Lese-Berechtigungen für alle Benutzerobjekte
  • Lese-Berechtigungen für alle Gruppenobjekte
  • Keine besonderen erhöhten Berechtigungen erforderlich

Dienstkonto erstellen:

Terminal-Fenster
# Dienstkonto in Active Directory erstellen
New-ADUser -Name "ramp-service" `
-SamAccountName "ramp-service" `
-UserPrincipalName "ramp-service@contoso.com" `
-Path "OU=Service Accounts,DC=contoso,DC=com" `
-AccountPassword (ConvertTo-SecureString "ServicePassword123!" -AsPlainText -Force) `
-Enabled $true `
-PasswordNeverExpires $true `
-CannotChangePassword $true

Schritt 4: SSL/TLS (LDAPS) aktivieren – Empfohlen

Abschnitt betitelt „Schritt 4: SSL/TLS (LDAPS) aktivieren – Empfohlen“

Verwenden Sie in der Produktion LDAPS (LDAP über SSL/TLS) auf Port 636.

{
"Authentication": {
"Providers": {
"LDAP": {
"Server": "ldaps://dc.contoso.com:636",
"UseSsl": true,
"SearchBase": "DC=contoso,DC=com",
"BindDn": "CN=ramp-service,OU=Service Accounts,DC=contoso,DC=com",
"BindPassword": "ServiceAccountPassword123!"
}
}
}
}
  • LDAP-Server muss ein gültiges SSL-Zertifikat haben
  • Das Zertifikat muss vom RAMP-Server als vertrauenswürdig eingestuft werden
  • Für selbstsignierte Zertifikate: zum vertrauenswürdigen Stammzertifikat-Speicher hinzufügen
Terminal-Fenster
# Zertifikat zu vertrauenswürdigen Zertifikaten kopieren
sudo cp ldap-ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

LDAP-Administrator zur Bootstrap-Konfiguration hinzufügen:

{
"Bootstrap": {
"Administrators": [
{
"IdentityProvider": "LDAP",
"Username": "john.doe",
"Email": "john.doe@contoso.com"
}
]
}
}

Terminal-Fenster
cd src/RAMP.API
dotnet run

Nach LDAP-Initialisierungsmeldungen suchen:

[INFO] LDAP provider initialized: ldap://dc.contoso.com:389
[INFO] LDAP bind successful
  1. Zur RAMP-Anmeldeseite navigieren
  2. LDAP-Benutzernamen eingeben (z. B. john.doe für AD, jdoe für OpenLDAP)
  3. LDAP-Passwort eingeben
  4. Wenn Auto-Bereitstellung aktiviert ist, wird das Benutzerkonto automatisch erstellt

Wenn EnableDirectorySearch auf true gesetzt ist, können Administratoren das LDAP-Verzeichnis bei der Rollenzuweisung durchsuchen.

  1. Administrator navigiert zur Rollenzuweisung (Template-Rollen, Instanz-Rollen usw.)
  2. Auf “Benutzer hinzufügen” klicken
  3. Benutzernamen oder E-Mail eingeben
  4. RAMP fragt LDAP ab und zeigt übereinstimmende Benutzer an
  5. Benutzer aus der Dropdown-Liste auswählen
  6. Benutzer wird automatisch bereitgestellt, wenn er sich noch nicht angemeldet hat
  • Suchergebnisse werden 5 Minuten lang gecacht
  • Maximal 50 Ergebnisse pro Suche
  • Sucht sowohl Benutzernamen- als auch E-Mail-Felder

Wenn AutoProvisionUsers auf true gesetzt ist:

  1. Benutzer gibt LDAP-Anmeldedaten ein
  2. RAMP validiert Anmeldedaten gegen LDAP
  3. Bei erfolgreichem Bind erstellt RAMP einen Benutzerdatensatz mit:
    • Benutzername aus dem LDAP-Attribut
    • E-Mail aus dem LDAP-Attribut
    • Vor-/Nachname aus den LDAP-Attributen
    • IdentityProvider: LDAP
  4. Benutzer kann sich nun bei RAMP anmelden

Prüfung 1: Netzwerkkonnektivität überprüfen

Terminal-Fenster
# Testen, ob der LDAP-Port erreichbar ist
telnet dc.contoso.com 389
# Oder mit nc
nc -zv dc.contoso.com 389

Prüfung 2: DNS-Auflösung überprüfen

Terminal-Fenster
nslookup dc.contoso.com

Prüfung 3: Firewall-Regeln prüfen

  • Sicherstellen, dass der RAMP-Server den LDAP-Port (389 oder 636) erreichen kann
  • Sowohl Host-Firewall als auch Netzwerk-Firewalls prüfen

Prüfung 1: BindDn-Format überprüfen

  • Active Directory: CN=benutzername,OU=einheit,DC=domain,DC=com
  • OpenLDAP: cn=benutzername,ou=einheit,dc=domain,dc=com

Prüfung 2: Bind manuell testen

Terminal-Fenster
# Active Directory
ldapsearch -H ldap://dc.contoso.com -D "CN=ramp-service,OU=Service Accounts,DC=contoso,DC=com" -W -b "DC=contoso,DC=com" "(sAMAccountName=testuser)"
# OpenLDAP
ldapsearch -H ldap://ldap.company.com -D "cn=ramp-bind,ou=services,dc=company,dc=com" -W -b "dc=company,dc=com" "(uid=testuser)"

Prüfung 3: Passwort überprüfen

  • Sicherstellen, dass keine Sonderzeichen falsch maskiert sind
  • Zuerst mit einem einfachen Passwort testen

Prüfung 1: Prüfen, ob Benutzer in LDAP vorhanden ist

Terminal-Fenster
ldapsearch -H ldap://dc.contoso.com -D "..." -W -b "DC=contoso,DC=com" "(sAMAccountName=username)"

Prüfung 2: UserSearchFilter überprüfen

  • Sicherstellen, dass die Filtersyntax korrekt ist
  • {0}-Platzhalter wird durch Benutzernamen ersetzt
  • Filter manuell mit ldapsearch testen

Prüfung 3: Kontostatus prüfen

  • Sicherstellen, dass das Benutzerkonto in LDAP nicht deaktiviert ist
  • Prüfen, ob das Passwort abgelaufen ist

Prüfung 1: Zertifikatskette überprüfen

Terminal-Fenster
openssl s_client -connect dc.contoso.com:636 -showcerts

Prüfung 2: Zertifikatvertrauen prüfen

  • Sicherstellen, dass das CA-Zertifikat im vertrauenswürdigen Speicher ist
  • Für selbstsignierte Zertifikate: das Zertifikat importieren

Prüfung 3: SSL-Überprüfung deaktivieren (nur für Tests)

{
"Authentication": {
"Providers": {
"LDAP": {
"UseSsl": true,
"IgnoreSslErrors": true
}
}
}
}

Verwenden Sie immer SSL/TLS (Port 636) für Produktions-Deployments, um Anmeldedaten während der Übertragung zu verschlüsseln.

  • Dienstkonto sollte nur Leseberechtigungen haben
  • Keine Administrator- oder Schreibberechtigungen erforderlich
  • Wenn möglich, auf bestimmte OUs einschränken

BindPassword in Azure Key Vault oder User Secrets speichern, nicht in appsettings.json:

Terminal-Fenster
# Entwicklung
dotnet user-secrets set "Authentication:Providers:LDAP:BindPassword" "password"
# Produktion - Azure Key Vault
# Speichern als: Authentication--Providers--LDAP--BindPassword
  • Audit-Protokollierung aktivieren
  • Benachrichtigungen bei wiederholten Bind-Fehlern einrichten
  • Kann auf Brute-Force-Angriffe oder Fehlkonfiguration hinweisen
  • LDAP-Zugriff auf RAMP-Server-IPs einschränken
  • Firewall-Regeln verwenden, um unbefugten Zugriff zu blockieren
  • VPN für externen Zugriff in Betracht ziehen

Zusätzliche LDAP-Attribute zuordnen:

{
"AttributeMappings": {
"Username": "sAMAccountName",
"Email": "mail",
"FirstName": "givenName",
"LastName": "sn",
"DisplayName": "displayName",
"EmployeeId": "employeeNumber",
"Department": "department",
"Title": "title"
}
}

Um den RAMP-Zugriff auf bestimmte AD-Gruppen einzuschränken, verwenden Sie einen Filter, der memberOf enthält:

{
"UserSearchFilter": "(&(objectClass=user)(memberOf=CN=RAMP Users,OU=Groups,DC=contoso,DC=com)(sAMAccountName={0}))"
}