SSO-Einrichtung¶
Single Sign-On für die Plattform
Die Plattform unterstützt drei SSO-Anmeldeverfahren, die alle nach dem Deployment über das Customer Portal (Einstellungen → SSO) eingerichtet werden:
| Typ | Anmeldeweg | Einsatz |
|---|---|---|
Microsoft Entra ID (azure-ad) |
Button „Mit Microsoft anmelden" (OIDC) | Microsoft-365-/Azure-Tenants |
Generisches OIDC (oidc) |
Social-Login-Button (OIDC) | Keycloak, Authentik, Google Workspace u. a. |
LDAP / Active Directory (ldap) |
Login-Formular mit Domänen-Konto | On-Premises Windows AD / LDAP |
Nur ein aktiver SSO-Provider
Es kann jeweils nur ein SSO-Provider gleichzeitig aktiv sein. Beim Aktivieren eines neuen Providers (z. B. LDAP) wird ein zuvor aktiver Entra-ID-/OIDC-Provider automatisch deaktiviert. Ein LDAP-Anmeldeformular und ein OIDC-Button lassen sich nicht sinnvoll parallel betreiben.
Microsoft Entra ID / Azure AD (OIDC)¶
Voraussetzungen¶
- Azure AD Tenant mit Admin-Zugang
- Benutzer im Azure AD angelegt
Schritt 1: App-Registrierung in Azure AD¶
- Azure Portal → Azure Active Directory → App-Registrierungen → Neue Registrierung
- Name:
Inovetra AI Platform - Redirect URI:
https://<domain>/api/customer/auth/azure/callback - Unter Zertifikate & Geheimnisse → Neues Client-Secret erstellen → Wert kopieren
- Notieren: Tenant ID, Client ID, Client Secret
Schritt 2: SSO im Customer Portal aktivieren¶
- Customer Portal → Einstellungen → SSO
- Azure AD Tenant ID, Client ID und Client Secret eintragen
- Speichern → Plattform wird automatisch neu konfiguriert
Schritt 3: Testen¶
- Im Browser:
https://<domain>/→ Login → "Mit Microsoft anmelden" Option sollte erscheinen - Test mit einem Azure AD Benutzer durchführen
Fehlerbehebung (Entra ID / OIDC)¶
| Problem | Lösung |
|---|---|
| "Redirect URI mismatch" | URI in Azure AD prüfen — muss exakt https://<domain>/api/customer/auth/azure/callback sein |
| Kein Microsoft-Login-Button | SSO-Konfiguration im Customer Portal prüfen, Pods müssen nach Änderung neustarten |
| "AADSTS50011" | Redirect URI in Azure AD stimmt nicht überein |
Client Secret Ablaufdatum
Das Client Secret hat ein Ablaufdatum in Azure AD. Vor Ablauf erneuern und im Customer Portal aktualisieren.
LDAP / Active Directory¶
Anmeldung mit dem Domänen-Konto
Bei LDAP/AD melden sich Benutzer nicht über einen Social-Login-Button an, sondern direkt über das normale Login-Formular mit ihrem Domänen-Konto (E-Mail bzw. Benutzername + Windows-Passwort). LibreChat authentifiziert über passport-ldapauth direkt gegen den Domain Controller.
Voraussetzungen¶
- Domain Controller erreichbar: Der DC muss aus der Plattform-/Cluster-Umgebung erreichbar sein — sowohl für den Verbindungstest aus der Customer API als auch für den eigentlichen Login aus dem LibreChat-/Chat-Pod. Erforderlich sind je nach Schema die Ports 389 (LDAP) bzw. 636 (LDAPS).
- FQDN in der LDAP-URL: Bei
ldaps://oder StartTLS mit Zertifikatsprüfung muss die LDAP-URL den FQDN des Domain Controllers enthalten (z. B.ldaps://dc01.firma.local:636), keine IP-Adresse — der Hostname wird gegen die SANs des Server-Zertifikats geprüft. - Such-Basis (Base DN): z. B.
OU=Users,DC=firma,DC=local— der Container, unterhalb dessen die Benutzerkonten gesucht werden. - Service-Konto (empfohlen): Ein dediziertes AD-Konto für den Bind (z. B.
CN=svc-librechat,OU=Service,DC=firma,DC=local). Ein anonymer Bind ist von Active Directory in der Regel nicht erlaubt. - Login-Formular aktiv:
librechat.allowEmailLoginmusstruesein (Standard in den Helm-Values), damit das Anmeldeformular und damit der LDAP-Login überhaupt angezeigt wird.
Schritt 1: Provider im Customer Portal anlegen¶
- Customer Portal → Einstellungen → SSO → Provider hinzufügen
- Als Typ „LDAP / Active Directory" auswählen
- Felder ausfüllen:
| Feld | Beschreibung | Beispiel |
|---|---|---|
| LDAP-Server URL | Schema ldap://host:389 (unverschlüsselt) oder ldaps://host:636 (TLS) |
ldaps://dc01.firma.local:636 |
| Such-Basis (Base DN) | Pflichtfeld — Suchbasis für Benutzerkonten | OU=Users,DC=firma,DC=local |
| Bind-DN (Service-Konto) | Optional; leer = anonymer Bind (von AD meist nicht erlaubt) | CN=svc-librechat,OU=Service,DC=firma,DC=local |
| Bind-Passwort | Passwort des Service-Kontos. Beim Bearbeiten leer lassen = aktuelles Passwort behalten | •••••••• |
| Such-Filter | Optional; Standard mail={{username}}. Für Anmeldung per AD-Benutzername z. B. sAMAccountName={{username}} |
sAMAccountName={{username}} |
| CA-Zertifikat (PEM) | Ab Chart 0.82.0. PEM-Zertifikat der ausstellenden CA für ldaps:///StartTLS. Wird als Kubernetes-Secret inovetra-ldap-ca gespeichert, im Chat-Pod nach /etc/ldap-ca/ca.crt gemountet und über LDAP_CA_CERT_PATH aktiviert |
-----BEGIN CERTIFICATE-----… |
| Berechtigte AD-Gruppe (DN) | Ab Chart 0.82.0. Optional — wenn gesetzt, dürfen sich nur direkte Mitglieder dieser Gruppe anmelden |
CN=Inovetra-Chat-Users,CN=Users,DC=firma,DC=local |
- Optionen je nach Umgebung setzen:
| Option | Wirkung |
|---|---|
| Anmeldung per Benutzername statt E-Mail-Adresse | Benutzer melden sich mit dem AD-Benutzernamen (sAMAccountName) statt der E-Mail-Adresse an. Such-Filter entsprechend setzen. |
| StartTLS verwenden | Hebt eine unverschlüsselte ldap://-Verbindung per StartTLS auf TLS an. |
| TLS-Zertifikat nicht prüfen | Deaktiviert die Zertifikatsprüfung — gedacht für interne oder selbstsignierte Firmen-Zertifikate, deren Stammzertifikat im Cluster nicht hinterlegt ist. |
„TLS-Zertifikat nicht prüfen" allein ist wirkungslos
LibreChat aktiviert seine LDAP-TLS-Optionen (einschließlich rejectUnauthorized) nur, wenn LDAP_CA_CERT_PATH gesetzt ist — also nur, wenn ein CA-Zertifikat (PEM) hinterlegt wurde. Bei internen oder selbstsignierten Zertifikaten daher immer das CA-Zertifikat im Provider-Formular eintragen; die Checkbox allein ändert am TLS-Verhalten nichts.
Schritt 2: Verbindung testen¶
Über den Verbindungstest-Button wird ein echter LDAP-Bind gegen den Domain Controller ausgeführt (nicht nur ein Discovery-Fetch wie bei OIDC). Ist ein CA-Zertifikat hinterlegt, prüft der Test die TLS-Verbindung mit verpflichtender Zertifikatsvalidierung gegen genau diese CA — inklusive Hostname-Abgleich gegen die SANs des Server-Zertifikats (daher den FQDN in der URL verwenden). Schlägt der Test fehl, sind die Verbindungs- oder Bind-Daten zu prüfen, bevor der Provider aktiviert wird.
Schritt 3: Provider aktivieren¶
Nach dem Speichern und Aktivieren werden am Chat-Deployment die LDAP_*-Umgebungsvariablen gesetzt (das Bind-Passwort stammt aus einem Kubernetes-Secret) und das Deployment wird neu gestartet. Anschließend zeigt das Login-Formular die Anmeldung mit dem Domänen-Konto an. Ab Chart 0.82.0 gilt zusätzlich:
- CA-Zertifikat: Ist ein CA-Zertifikat hinterlegt, wird es als Secret
inovetra-ldap-cain den Chat-Pod nach/etc/ldap-ca/ca.crtgemountet undLDAP_CA_CERT_PATHgesetzt. - AD-Gruppe: Ist eine berechtigte AD-Gruppe (DN) gesetzt, komponiert die Plattform den Such-Filter als
(&(<Benutzer-Klausel>)(memberOf=<Gruppen-DN>)). Die Benutzer-Klausel ist der explizit gesetzte Such-Filter oder — je nach Option „Anmeldung per Benutzername" —sAMAccountName={{username}}bzw.mail={{username}}. Es zählt nur die direkte Gruppenmitgliedschaft (keine verschachtelten Gruppen). - Anzeigename:
LDAP_FULL_NAME=displayNamewird immer gesetzt — der Chat begrüßt Benutzer mit ihrem echten Namen statt mit dem Konto-Kürzel.
Ab Chart 0.82.4 gilt außerdem:
- Kurze AD-Passwörter: Die Passwort-Richtlinie liegt vollständig beim Active Directory — auch Domänen-Passwörter mit weniger als 8 Zeichen werden akzeptiert. Vorher blockierte die clientseitige Prüfung des Login-Formulars solche Konten (lokale Mindestlänge 8 Zeichen). Lokale Chat-Anmeldungen sind bei aktivem LDAP ohnehin deaktiviert.
Nach dem Update auf 0.82.4: Provider einmal deaktivieren und reaktivieren
Ist beim Update auf Chart 0.82.4 bereits ein LDAP-Provider eingerichtet, diesen im Customer Portal einmal deaktivieren und wieder aktivieren, damit alle Verbesserungen sicher greifen.
Nur ein aktiver Provider
Wird LDAP aktiviert, deaktiviert die Plattform automatisch einen zuvor aktiven Entra-ID-/OIDC-Provider. Siehe Hinweis am Seitenanfang.
Benutzer-Import und Portal-Zugang¶
- Automatischer Import: Meldet sich ein AD-Benutzer erstmals im Chat an, wird das Konto automatisch in die Benutzerverwaltung des Customer Portals importiert (Badge „LDAP / AD") — ab Chart
0.82.4innerhalb von ca. 2 Minuten (vorher bis zu 10 Minuten). Importierte LDAP-Konten sind vorab freigegeben, da der Zugang bereits über die berechtigte AD-Gruppe gesteuert wird. - Portal-Anmeldung mit dem Domänen-Konto: LDAP-Benutzer melden sich auch am Customer Portal mit ihren AD-Zugangsdaten an — wahlweise mit dem AD-Kontonamen (
sAMAccountName) oder der E-Mail-Adresse; es gelten dieselben Zugangsdaten wie im Chat. Der Gruppen-Filter gilt auch hier. - Rollen-Voraussetzung: Für das Portal ist mindestens die Rolle RAG-Manager erforderlich. Benutzer mit der Rolle „User" erhalten nach korrekter Passwortprüfung eine deutsche Fehlermeldung (nur Chat-Zugriff — mindestens RAG-Manager erforderlich); nicht freigegebene Konten sehen den Hinweis, dass das Konto auf Freigabe wartet.
Fehlerbehebung (LDAP / AD)¶
| Problem | Lösung |
|---|---|
| Bind fehlgeschlagen (Verbindungstest oder Login) | Bind-DN und Bind-Passwort prüfen. Bei leerem Bind-DN versucht die Plattform einen anonymen Bind, den AD meist ablehnt → Service-Konto eintragen. |
Zertifikatsfehler bei ldaps:// |
Internes/selbstsigniertes Zertifikat → das CA-Zertifikat (PEM) im Provider-Formular hinterlegen (ab Chart 0.82.0). „TLS-Zertifikat nicht prüfen" allein ist wirkungslos, da LibreChat seine TLS-Optionen nur mit hinterlegtem CA-Zertifikat aktiviert. |
| „unable to verify the first certificate" | Das DC-Zertifikat stammt von einer internen CA, die dem Chat-Pod nicht bekannt ist → CA-Zertifikat (PEM) im Portal hinterlegen. Zusätzlich prüfen, ob die LDAP-URL den FQDN (nicht die IP) enthält. |
| „SASLprep error: ASCII control character present" | Beim Kopieren ist ein unsichtbares Steuerzeichen (z. B. Tabulator) ins Bind-Passwort oder einen DN geraten. Ab Chart 0.82.0 bereinigt die Plattform Steuerzeichen automatisch; bei älteren Versionen den Wert von Hand neu eingeben. |
| Login trotz korrekter Zugangsdaten abgelehnt (AD-Gruppe gesetzt) | Es zählt nur die direkte Mitgliedschaft in der berechtigten AD-Gruppe — verschachtelte Gruppen werden nicht aufgelöst. Gruppen-DN prüfen. |
| Kein Login-Formular sichtbar | librechat.allowEmailLogin muss true sein, damit das Anmeldeformular (und damit der LDAP-Login) erscheint. |
| Domain Controller nicht erreichbar | Firewall/Routing prüfen — der DC muss aus dem Cluster über Port 389 bzw. 636 erreichbar sein (Test und Login laufen aus der Cluster-Umgebung). |
| Benutzer wird nicht gefunden | Such-Basis (Base DN) und Such-Filter prüfen. Bei Benutzername-Anmeldung Filter sAMAccountName={{username}} setzen und die Checkbox aktivieren. |
| Login mit kurzem AD-Passwort (unter 8 Zeichen) abgelehnt | Ab Chart 0.82.4 unterstützt — die Passwort-Richtlinie liegt vollständig beim AD. Plattform aktualisieren und den LDAP-Provider einmal deaktivieren und wieder aktivieren. |