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.
Funktionen
Abschnitt betitelt „Funktionen“- 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
Anwendungsfälle
Abschnitt betitelt „Anwendungsfälle“- Integration von Unternehmensverzeichnissen
- Zentrale Benutzerverwaltung
- Active Directory ohne Windows Auth/IIS
- OpenLDAP-Umgebungen
Voraussetzungen
Abschnitt betitelt „Voraussetzungen“- 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
Schritt 1: LDAP-Informationen sammeln
Abschnitt betitelt „Schritt 1: LDAP-Informationen sammeln“Sie benötigen die folgenden Informationen von Ihrem LDAP-Administrator:
| Einstellung | Beispiel (Active Directory) | Beispiel (OpenLDAP) |
|---|---|---|
| LDAP-Server | ldap://dc.contoso.com:389 | ldap://ldap.company.com:389 |
| Suchbasis | DC=contoso,DC=com | dc=company,dc=com |
| Dienstkonto-DN | CN=ramp-service,OU=Service Accounts,DC=contoso,DC=com | cn=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) |
Schritt 2: RAMP-Backend konfigurieren
Abschnitt betitelt „Schritt 2: RAMP-Backend konfigurieren“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" } ] }}Konfigurationsreferenz
Abschnitt betitelt „Konfigurationsreferenz“| Einstellung | Erforderlich | Beschreibung |
|---|---|---|
Enabled | Ja | Auf true setzen, um LDAP-Authentifizierung zu aktivieren |
Server | Ja | LDAP-Server-URL (Format: ldap://host:port oder ldaps://host:port) |
SearchBase | Ja | Basis-DN für alle LDAP-Suchen |
BindDn | Ja | Distinguished Name des Dienstkontos für Bind-Operationen |
BindPassword | Ja | Passwort für das Dienstkonto |
UseSsl | Nein | LDAPS (Port 636) verwenden. Standard: false |
UserSearchFilter | Ja | LDAP-Filter zur Benutzersuche. {0} wird durch den Benutzernamen ersetzt |
GroupSearchFilter | Nein | LDAP-Filter zur Gruppensuche |
AttributeMappings | Ja | LDAP-Attribute auf RAMP-Benutzerfelder abbilden |
EnableDirectorySearch | Nein | Verzeichnissuche nach Benutzern/Gruppen erlauben. Standard: false |
AutoProvisionUsers | Nein | RAMP-Benutzer bei der ersten Anmeldung erstellen. Standard: true |
Schritt 3: Verzeichnisspezifische Konfiguration
Abschnitt betitelt „Schritt 3: Verzeichnisspezifische Konfiguration“{ "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 } } }}Dienstkonto-Berechtigungen (Active Directory)
Abschnitt betitelt „Dienstkonto-Berechtigungen (Active Directory)“Das Dienstkonto benötigt:
- Lese-Berechtigungen für alle Benutzerobjekte
- Lese-Berechtigungen für alle Gruppenobjekte
- Keine besonderen erhöhten Berechtigungen erforderlich
Dienstkonto erstellen:
# Dienstkonto in Active Directory erstellenNew-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{ "Authentication": { "Providers": { "LDAP": { "Enabled": true, "Server": "ldap://ldap.company.com:389", "SearchBase": "dc=company,dc=com", "BindDn": "cn=ramp-bind,ou=services,dc=company,dc=com", "BindPassword": "BindPassword123!", "UseSsl": false, "UserSearchFilter": "(&(objectClass=inetOrgPerson)(uid={0}))", "GroupSearchFilter": "(objectClass=groupOfNames)", "AttributeMappings": { "Username": "uid", "Email": "mail", "FirstName": "givenName", "LastName": "sn", "DisplayName": "cn" }, "EnableDirectorySearch": true, "AutoProvisionUsers": true } } }}Dienstkonto erstellen (OpenLDAP)
Abschnitt betitelt „Dienstkonto erstellen (OpenLDAP)“dn: cn=ramp-bind,ou=services,dc=company,dc=comobjectClass: simpleSecurityObjectobjectClass: organizationalRolecn: ramp-binddescription: RAMP LDAP Bind AccountuserPassword: {SSHA}HashedPasswordHereZu OpenLDAP hinzufügen:
ldapadd -x -D "cn=admin,dc=company,dc=com" -W -f ramp-bind.ldifSchritt 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.
Konfiguration aktualisieren
Abschnitt betitelt „Konfiguration aktualisieren“{ "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!" } } }}Zertifikatsanforderungen
Abschnitt betitelt „Zertifikatsanforderungen“- 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
# Zertifikat zu vertrauenswürdigen Zertifikaten kopierensudo cp ldap-ca.crt /usr/local/share/ca-certificates/sudo update-ca-certificates# Zertifikat in Vertrauenswürdige Stammzertifizierungsstellen importierenImport-Certificate -FilePath ldap-ca.crt -CertStoreLocation Cert:\LocalMachine\RootSchritt 5: Bootstrap-Administrator konfigurieren
Abschnitt betitelt „Schritt 5: Bootstrap-Administrator konfigurieren“LDAP-Administrator zur Bootstrap-Konfiguration hinzufügen:
{ "Bootstrap": { "Administrators": [ { "IdentityProvider": "LDAP", "Username": "john.doe", "Email": "john.doe@contoso.com" } ] }}Schritt 6: LDAP-Konfiguration testen
Abschnitt betitelt „Schritt 6: LDAP-Konfiguration testen“RAMP starten
Abschnitt betitelt „RAMP starten“cd src/RAMP.APIdotnet runProtokolle prüfen
Abschnitt betitelt „Protokolle prüfen“Nach LDAP-Initialisierungsmeldungen suchen:
[INFO] LDAP provider initialized: ldap://dc.contoso.com:389[INFO] LDAP bind successfulAnmeldung testen
Abschnitt betitelt „Anmeldung testen“- Zur RAMP-Anmeldeseite navigieren
- LDAP-Benutzernamen eingeben (z. B.
john.doefür AD,jdoefür OpenLDAP) - LDAP-Passwort eingeben
- Wenn Auto-Bereitstellung aktiviert ist, wird das Benutzerkonto automatisch erstellt
Verzeichnissuche-Funktion
Abschnitt betitelt „Verzeichnissuche-Funktion“Wenn EnableDirectorySearch auf true gesetzt ist, können Administratoren das LDAP-Verzeichnis bei der Rollenzuweisung durchsuchen.
Funktionsweise
Abschnitt betitelt „Funktionsweise“- Administrator navigiert zur Rollenzuweisung (Template-Rollen, Instanz-Rollen usw.)
- Auf “Benutzer hinzufügen” klicken
- Benutzernamen oder E-Mail eingeben
- RAMP fragt LDAP ab und zeigt übereinstimmende Benutzer an
- Benutzer aus der Dropdown-Liste auswählen
- Benutzer wird automatisch bereitgestellt, wenn er sich noch nicht angemeldet hat
Suchperformance
Abschnitt betitelt „Suchperformance“- Suchergebnisse werden 5 Minuten lang gecacht
- Maximal 50 Ergebnisse pro Suche
- Sucht sowohl Benutzernamen- als auch E-Mail-Felder
Automatische Bereitstellung
Abschnitt betitelt „Automatische Bereitstellung“Wenn AutoProvisionUsers auf true gesetzt ist:
- Benutzer gibt LDAP-Anmeldedaten ein
- RAMP validiert Anmeldedaten gegen LDAP
- 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
- Benutzer kann sich nun bei RAMP anmelden
Fehlerbehebung
Abschnitt betitelt „Fehlerbehebung“Verbindung zum LDAP-Server nicht möglich
Abschnitt betitelt „Verbindung zum LDAP-Server nicht möglich“Prüfung 1: Netzwerkkonnektivität überprüfen
# Testen, ob der LDAP-Port erreichbar isttelnet dc.contoso.com 389
# Oder mit ncnc -zv dc.contoso.com 389Prüfung 2: DNS-Auflösung überprüfen
nslookup dc.contoso.comPrü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
Bind-Operation fehlgeschlagen
Abschnitt betitelt „Bind-Operation fehlgeschlagen“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
# Active Directoryldapsearch -H ldap://dc.contoso.com -D "CN=ramp-service,OU=Service Accounts,DC=contoso,DC=com" -W -b "DC=contoso,DC=com" "(sAMAccountName=testuser)"
# OpenLDAPldapsearch -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
Benutzerauthentifizierung schlägt fehl
Abschnitt betitelt „Benutzerauthentifizierung schlägt fehl“Prüfung 1: Prüfen, ob Benutzer in LDAP vorhanden ist
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
SSL/TLS-Zertifikatsfehler
Abschnitt betitelt „SSL/TLS-Zertifikatsfehler“Prüfung 1: Zertifikatskette überprüfen
openssl s_client -connect dc.contoso.com:636 -showcertsPrü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 } } }}Sicherheits-Best-Practices
Abschnitt betitelt „Sicherheits-Best-Practices“1. LDAPS in der Produktion verwenden
Abschnitt betitelt „1. LDAPS in der Produktion verwenden“Verwenden Sie immer SSL/TLS (Port 636) für Produktions-Deployments, um Anmeldedaten während der Übertragung zu verschlüsseln.
2. Dienstkonto mit minimalen Rechten
Abschnitt betitelt „2. Dienstkonto mit minimalen Rechten“- Dienstkonto sollte nur Leseberechtigungen haben
- Keine Administrator- oder Schreibberechtigungen erforderlich
- Wenn möglich, auf bestimmte OUs einschränken
3. Sichere Passwort-Speicherung
Abschnitt betitelt „3. Sichere Passwort-Speicherung“BindPassword in Azure Key Vault oder User Secrets speichern, nicht in appsettings.json:
# Entwicklungdotnet user-secrets set "Authentication:Providers:LDAP:BindPassword" "password"
# Produktion - Azure Key Vault# Speichern als: Authentication--Providers--LDAP--BindPassword4. Fehlgeschlagene Anmeldungen überwachen
Abschnitt betitelt „4. Fehlgeschlagene Anmeldungen überwachen“- Audit-Protokollierung aktivieren
- Benachrichtigungen bei wiederholten Bind-Fehlern einrichten
- Kann auf Brute-Force-Angriffe oder Fehlkonfiguration hinweisen
5. Netzwerksicherheit
Abschnitt betitelt „5. Netzwerksicherheit“- LDAP-Zugriff auf RAMP-Server-IPs einschränken
- Firewall-Regeln verwenden, um unbefugten Zugriff zu blockieren
- VPN für externen Zugriff in Betracht ziehen
Erweiterte Konfiguration
Abschnitt betitelt „Erweiterte Konfiguration“Benutzerdefinierte Attribut-Zuordnungen
Abschnitt betitelt „Benutzerdefinierte Attribut-Zuordnungen“Zusätzliche LDAP-Attribute zuordnen:
{ "AttributeMappings": { "Username": "sAMAccountName", "Email": "mail", "FirstName": "givenName", "LastName": "sn", "DisplayName": "displayName", "EmployeeId": "employeeNumber", "Department": "department", "Title": "title" }}Gruppenbasierte Zugriffssteuerung
Abschnitt betitelt „Gruppenbasierte Zugriffssteuerung“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}))"}Nächste Schritte
Abschnitt betitelt „Nächste Schritte“- Bootstrap-Administratoren – LDAP-Benutzern automatisch Admin-Rollen zuweisen
- E-Mail-Konfiguration – E-Mail-Benachrichtigungen aktivieren
- Authentifizierungsübersicht – Alle Authentifizierungsanbieter vergleichen