feat: add LDAP authentication as per-tenant login method
Add LDAP as a third authentication option alongside local password and Microsoft Entra ID SSO. Per-tenant configuration supports Active Directory, OpenLDAP, and FreeIPA with configurable attribute mapping, search-then-bind and direct-bind methods, encrypted bind credentials (AES-256-GCM), profile sync on login, and user auto-provisioning via external identity linking. Includes admin UI for connection settings with test-connection button, login page LDAP form, 25 new PHPUnit tests, and de/en translations. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1355,5 +1355,63 @@
|
||||
"Environment": "Umgebung",
|
||||
"Modules": "Module",
|
||||
"Version": "Version",
|
||||
"Breadcrumb": "Breadcrumb"
|
||||
"Breadcrumb": "Breadcrumb",
|
||||
"LDAP Authentication": "LDAP-Authentifizierung",
|
||||
"LDAP Username": "LDAP-Benutzername",
|
||||
"Sign in with LDAP": "Mit LDAP anmelden",
|
||||
"LDAP login is not available for this tenant.": "LDAP-Anmeldung ist für diesen Mandanten nicht verfügbar.",
|
||||
"Your email domain is not allowed for LDAP login on this tenant.": "Ihre E-Mail-Domain ist für die LDAP-Anmeldung bei diesem Mandanten nicht zugelassen.",
|
||||
"LDAP server is not reachable. Please try again later.": "LDAP-Server ist nicht erreichbar. Bitte versuchen Sie es später erneut.",
|
||||
"Your LDAP account does not have an email address configured.": "Ihr LDAP-Konto hat keine E-Mail-Adresse konfiguriert.",
|
||||
"LDAP host is required": "LDAP-Host ist erforderlich",
|
||||
"LDAP base DN is required": "LDAP-Base-DN ist erforderlich",
|
||||
"LDAP port must be between 1 and 65535": "LDAP-Port muss zwischen 1 und 65535 liegen",
|
||||
"Search filter must contain %s placeholder": "Suchfilter muss den Platzhalter %s enthalten",
|
||||
"LDAP-only login requires a complete configuration": "Nur-LDAP-Anmeldung erfordert eine vollständige Konfiguration",
|
||||
"Direct bind method requires a username format": "Direkte Bindung erfordert ein Benutzernamenformat",
|
||||
"Bind DN could not be encrypted": "Bind-DN konnte nicht verschlüsselt werden",
|
||||
"Bind password could not be encrypted": "Bind-Passwort konnte nicht verschlüsselt werden",
|
||||
"Tenant LDAP settings could not be saved": "LDAP-Einstellungen des Mandanten konnten nicht gespeichert werden",
|
||||
"Bind DN could not be decrypted": "Bind-DN konnte nicht entschlüsselt werden",
|
||||
"Bind password could not be decrypted": "Bind-Passwort konnte nicht entschlüsselt werden",
|
||||
"LDAP login": "LDAP-Anmeldung",
|
||||
"LDAP setup is incomplete": "LDAP-Konfiguration ist unvollständig",
|
||||
"LDAP connection settings": "LDAP-Verbindungseinstellungen",
|
||||
"Enable LDAP login for this tenant": "LDAP-Anmeldung für diesen Mandanten aktivieren",
|
||||
"LDAP Host": "LDAP-Host",
|
||||
"Encryption": "Verschlüsselung",
|
||||
"None (not recommended)": "Keine (nicht empfohlen)",
|
||||
"Verify TLS certificate": "TLS-Zertifikat überprüfen",
|
||||
"Base DN": "Base-DN",
|
||||
"Bind DN (service account)": "Bind-DN (Dienstkonto)",
|
||||
"Bind password": "Bind-Passwort",
|
||||
"Clear bind password": "Bind-Passwort löschen",
|
||||
"Test connection": "Verbindung testen",
|
||||
"Search and bind settings": "Such- und Bindungseinstellungen",
|
||||
"Bind method": "Bindungsmethode",
|
||||
"Search then bind (recommended)": "Suchen dann binden (empfohlen)",
|
||||
"Direct bind": "Direkte Bindung",
|
||||
"User search filter": "Benutzer-Suchfilter",
|
||||
"Search scope": "Suchbereich",
|
||||
"Subtree (recursive)": "Unterbaum (rekursiv)",
|
||||
"One level": "Eine Ebene",
|
||||
"Network timeout (seconds)": "Netzwerk-Timeout (Sekunden)",
|
||||
"Direct bind username format": "Format für direkte Bindung",
|
||||
"Unique ID attribute": "Eindeutiges ID-Attribut",
|
||||
"Attribute mapping and sync": "Attributzuordnung und Synchronisierung",
|
||||
"Map application fields to LDAP directory attributes.": "Anwendungsfelder den LDAP-Verzeichnisattributen zuordnen.",
|
||||
"Profile sync on LDAP login": "Profilsynchronisierung bei LDAP-Anmeldung",
|
||||
"Allow LDAP-only login (disable local password login)": "Nur LDAP-Anmeldung erlauben (lokale Passwortanmeldung deaktivieren)",
|
||||
"Sync email": "E-Mail synchronisieren",
|
||||
"AD: objectGUID, OpenLDAP: entryUUID, FreeIPA: ipaUniqueID": "AD: objectGUID, OpenLDAP: entryUUID, FreeIPA: ipaUniqueID",
|
||||
"Login could not be completed. Please contact your administrator.": "Anmeldung konnte nicht abgeschlossen werden. Bitte kontaktieren Sie Ihren Administrator.",
|
||||
"Only for direct bind. Use %s as placeholder. Example: %s@corp.example.com or uid=%s,ou=People,dc=example,dc=com": "Nur für direkte Bindung. Verwenden Sie %s als Platzhalter. Beispiel: %s@corp.example.com oder uid=%s,ou=People,dc=example,dc=com",
|
||||
"Optional allow-list, comma or newline separated.": "Optionale Zulassungsliste, durch Komma oder Zeilenumbruch getrennt.",
|
||||
"Please enter your username and password.": "Bitte geben Sie Ihren Benutzernamen und Ihr Passwort ein.",
|
||||
"Port": "Port",
|
||||
"Search-then-bind uses a service account to find the user DN first, then binds with the user credentials.": "Suchen-dann-binden verwendet ein Dienstkonto, um zuerst den Benutzer-DN zu finden, und bindet dann mit den Benutzeranmeldedaten.",
|
||||
"Use %s as placeholder for the username. Examples: (&(objectClass=user)(sAMAccountName=%s)) for AD, (&(objectClass=inetOrgPerson)(uid=%s)) for OpenLDAP": "Verwenden Sie %s als Platzhalter für den Benutzernamen. Beispiele: (&(objectClass=user)(sAMAccountName=%s)) für AD, (&(objectClass=inetOrgPerson)(uid=%s)) für OpenLDAP",
|
||||
"Username or password not valid": "Benutzername oder Passwort ungültig",
|
||||
"Write-only. Leave empty to keep current value.": "Nur Schreibzugriff. Leer lassen, um den aktuellen Wert beizubehalten.",
|
||||
"Your account is deactivated.": "Ihr Konto ist deaktiviert."
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user