Zurück zum Blog

Login lädt nicht: Drei SSO-Stolperfallen und wie man sie erkennt

Login lädt nicht: Drei SSO-Stolperfallen und wie man sie erkennt

Datum 15. Juli 2026
Kategorie Identity & Access
Lesezeit 8 Minuten

Drei Fehler, die gleich aussehen

„Der Login funktioniert nicht“ ist eine der unbefriedigendsten Fehlermeldungen überhaupt, weil zwischen Browser, Reverse-Proxy und Identity-Provider viele Schichten liegen. Innerhalb weniger Tage traten an derselben Anmeldeseite drei völlig verschiedene Probleme auf – die sich äußerlich verblüffend ähnelten. Genau das macht sie zu einem guten Lehrstück: Das Symptom sagt fast nichts über die Ursache.

Alle drei Fälle betrafen eine moderne SSO-Lösung hinter einem Reverse-Proxy. Die Muster sind aber allgemein: Sie treten bei jeder JavaScript-lastigen Anmeldeoberfläche auf, die über einen Proxy mit Ratelimit ausgeliefert wird.

Falle 1: Das Ratelimit blockt die Login-Oberfläche

Das erste Symptom: Die Anmeldeseite zeigte nur den Hintergrund – kein Eingabeformular. Ein Neuladen half meistens, aber nicht immer. Ein Fehler, der „manchmal“ auftritt und sich durch Neuladen bessert, riecht nach einem Timing- oder Mengenproblem.

Die Ursache steckte im Reverse-Proxy. Eine Ratelimit-Regel begrenzte die Anmeldedomain auf wenige Anfragen pro Minute – gedacht als Brute-Force-Schutz. Doch eine moderne Login-Oberfläche ist eine JavaScript-Anwendung: Beim Kaltstart lädt sie Dutzende Ressourcen parallel – Code-Bündel, Schriften, mehrere Konfigurations-Abfragen. Ein einziger Seitenaufruf sprengt so ein knappes Limit mühelos.

Warum nur der Hintergrund erschien: Die Anfragen, die über das Limit hinausgingen, beantwortete der Proxy mit „429 – zu viele Anfragen“. Getroffen hat es unter anderem die JavaScript-Bündel, die das Formular aufbauen. Der Hintergrund (reines CSS) lud, das Formular (JavaScript) nicht. Beim Neuladen kamen die Dateien aus dem Browser-Cache, es blieben weniger Anfragen übrig – die gingen unter dem Limit durch. Daher half der Refresh „manchmal“.

Die Messung bestätigte es: Ein echter Nutzer erzeugte im Kaltstart bis zu über hundert Anfragen pro Minute, das Limit lag bei wenigen Dutzend. In jedem zwölften Zeitfenster lief er darüber – und genau dann brach die Seite. Nebenbei zeigte sich, dass dieselbe Regel auch andere Dienste betraf: Bei der automatischen Mail-Client-Konfiguration wurde fast jede zweite Anfrage abgewiesen.

Der erste, schnelle Schritt war, das Limit auf einen realistischen Wert anzuheben – deutlich über den gemessenen Spitzen echter Nutzer, aber immer noch weit unter dem, was aggressive Scanner erzeugen. Denn die liefen mit dem Mehrfachen und sollen weiterhin gebremst werden.

Der saubere Fix: statische Dateien ausnehmen

Das Limit hochzusetzen behandelt das Symptom. Sauberer ist, das Ratelimit dort gar nicht erst greifen zu lassen, wo es nichts zu suchen hat: bei den statischen Dateien. Ein Brute-Force-Angriff findet an den Anmelde- und Token-Endpunkten statt, nicht beim Laden eines JavaScript-Bündels.

Die Lösung ist ein eigener Proxy-Router für den Pfad der statischen Ressourcen, der die Ratelimit-Regel nicht durchläuft. Das Limit bleibt scharf auf den Endpunkten, die zählen, und stört das Laden der Oberfläche nicht mehr.

Eine Falle beim Ausnehmen: Wer für die statischen Dateien einfach die gesamte Middleware-Kette weglässt, entfernt womöglich auch die Sicherheits-Header (HSTS, Content-Type-Schutz, Clickjacking-Schutz). Dann repariert man ein Performance-Problem und reißt dabei ein Sicherheitsloch auf. Der Ausnahme-Router muss die Header behalten und nur das Ratelimit auslassen.

Verifiziert wurde in beide Richtungen: Die statischen Dateien liefen jetzt auch unter Hunderten Anfragen ohne Limit durch – die Anmelde-Endpunkte wurden weiterhin sauber gedrosselt, und die Sicherheits-Header waren auf den statischen Dateien noch vorhanden. Ein Fix ist erst dann gut, wenn man auch beweist, dass er das Gewünschte nicht kaputtgemacht hat.

Falle 2: Selbst ausgesperrt, getarnt als „Not Found“

Der zweite Fall sah zunächst nach einem defekten System aus: Die Anmeldeseite lieferte schlicht „Not Found“. Kein Formular, keine Fehlermeldung – als wäre der Anmelde-Ablauf verschwunden.

Die Ursache war ein Reputations-basierter Brute-Force-Schutz. Solche Systeme senken bei jedem Fehlversuch einen Punktestand für die IP-Adresse; fällt er unter eine Schwelle, wird der Zugang zum Anmelde-Ablauf verweigert. Und hier kommt das entscheidende Detail:

Bewusste Tarnung: Viele Identity-Provider zeigen einen durch eine Richtlinie gesperrten Ablauf absichtlich als „Not Found“ (HTTP 404) an – um dessen Existenz nicht zu verraten. Es sieht also aus wie ein technischer Defekt, ist aber eine Sicherheitsfunktion, die genau so gedacht ist.

Ausgelöst hatte es ein simpler Tippfehler: Die Anmeldung war mehrfach mit einer minimal falsch geschriebenen Adresse versucht worden. Jeder Fehlversuch senkte den Punktestand, bis die eigene IP gesperrt war. Man hatte sich mit dem eigenen Brute-Force-Schutz ausgesperrt.

Diagnose-Reihenfolge: Wer bei einem reputationsbasierten Schutz ein „Not Found“ auf der Anmeldeseite sieht, sollte zuerst den Reputationsstand der eigenen IP prüfen – nicht den Anmelde-Ablauf debuggen. Und Vorsicht: Prüft der Schutz auf IP-Ebene, trifft die Sperre alle Nutzer hinter derselben Adresse.

Die Sofortmaßnahme ist, den Reputationseintrag der IP zurückzusetzen. Die dauerhafte Verbesserung: die Schwelle etwas großzügiger setzen. Drei Tippfehler und eine 24-Stunden-Sperre mit einer irreführenden Meldung ist für einen Administrator eine unnötig scharfe Falle – zumal eine zweite Schutzschicht (Abbruch des Ablaufs nach einigen Fehlversuchen) ohnehin greift. Der Schutz bleibt bestehen, er schnappt nur nicht mehr bei der kleinsten Unachtsamkeit zu.

Falle 3: Ein Syntaxfehler im Attribut-Mapping

Der dritte Fall war kein Login-Fehler im engeren Sinn, tauchte aber im selben Umfeld auf: Der Identity-Provider meldete bei jeder Anmeldung eines bestimmten Dienstes einen Konfigurationsfehler. Sichtbar war das nur intern – in keinem Alarmkanal (ein eigenes Kapitel, das an anderer Stelle beschrieben ist).

Solche Provider erlauben es, per kleiner Ausdrücke zusätzliche Attribute (Claims) an die angebundene Anwendung mitzugeben – hier etwa eine Vorlagenzuordnung für neue Nutzer. Der hinterlegte Ausdruck sollte ein einfaches Schlüssel-Wert-Paar zurückgeben. Er tat es nicht, denn er enthielt einen klassischen Anfängerfehler: fehlende Anführungszeichen.

Was passiert war: Der Ausdruck gab ein Objekt mit Schlüssel und Wert zurück – beide ohne Anführungszeichen. Die Ausführungsumgebung interpretierte sie deshalb als Variablennamen, die es nicht gab, statt als Text. Ergebnis: ein Fehler bei jeder Auswertung, und das zusätzliche Attribut wurde nie ausgeliefert. Die angebundene Anwendung bekam die Vorlagenzuordnung also nie.

Die Korrektur war ein Zeichenpaar – Anführungszeichen um Schlüssel und Wert. Doch bevor man so etwas „einfach repariert“, lohnt die Gegenprobe, dass Name und Wert überhaupt stimmen: Erwartet die angebundene Anwendung genau diesen Attributnamen? Existiert die referenzierte Vorlage auf der Gegenseite? Beides passte hier – nur die Syntax war kaputt. Ein korrekt geschriebener Ausdruck, der ins Leere zeigt, wäre die nächste Fehlersuche gewesen.

Verifiziert wurde durch direkte Auswertung des Ausdrucks: Statt einer Ausnahme lieferte er jetzt das erwartete Schlüssel-Wert-Paar, und es entstanden keine neuen Konfigurationsfehler mehr.

Lessons Learned

Die wichtigsten Erkenntnisse:
  • Ratelimits gehören auf Anmelde- und Token-Endpunkte, nicht auf statische Dateien. Eine JavaScript-Oberfläche lädt beim Kaltstart Dutzende Ressourcen parallel und sprengt sonst jedes knappe Limit.
  • Beim Ausnehmen statischer Pfade die Sicherheits-Header behalten – sonst wird aus dem Performance-Fix ein Sicherheitsloch.
  • Ein „Not Found“ auf der Anmeldeseite kann eine getarnte Sperre sein. Bei reputationsbasiertem Schutz zuerst den eigenen Punktestand prüfen, nicht den Ablauf debuggen.
  • IP-basierte Sperren treffen alle hinter derselben Adresse. Die Schwelle sollte Tippfehler verzeihen, ohne den Schutz aufzugeben.
  • Attribut-Mappings sind kleine Programme. Fehlende Anführungszeichen machen aus Text einen nicht existierenden Variablennamen – ein Fehler, den keine oberflächliche Prüfung zeigt.
  • Vor jeder „schnellen“ Korrektur gegenprüfen, dass der Zielwert überhaupt stimmt – sonst repariert man die Form und nicht die Funktion.
  • Über allem: Das Symptom sagt fast nichts. Drei völlig verschiedene Ursachen äußerten sich hier als „der Login geht nicht“.

Zwischen Browser und Identity-Provider liegen viele Schichten, und jede kann eine Anmeldung auf ihre eigene Weise scheitern lassen. Die verlässlichste Diagnose beginnt nicht mit einer Vermutung, sondern mit der Frage, welche Anfrage genau welchen Fehlercode bekommt – und wo auf dem Weg das passiert.