Wir verwenden DiscourseSSO und sporadisch treten bei Benutzern Anmeldeprobleme auf (ähnlich wie unter Sporadic issue wp-discourse/SSO: Nonce has already expired). Ich habe versucht, dies durch Hinzufügen zusätzlicher Protokollierung zu debuggen, und glücklicherweise trat das Problem nach ein paar Tagen auf. Um es klarzustellen: Die Anmeldung funktioniert meistens, nur sporadisch (vielleicht 5 Minuten am Tag) treten bei Benutzern Anmeldeprobleme auf.
Wir verwenden eine Unterordner-Einrichtung auf einem Multi-Node-Cluster, externe gemeinsame Datenbank und Redis, falls das eine Rolle spielt. Es gibt zwei fehlschlagende Szenarien:
-
Nonce abgelaufen
Wenn der Benutzer zu /session/sso_login umgeleitet wird, erhält SessionController keine session_id in der Sitzung und kann daher die Nonce nicht nachschlagen. Ich habe versucht, die Sitzung zu protokollieren (Rails.logger.warn("Verbose SSO log: Session #{session.keys.map {|key| [key, session[key]].join('=')}.join(',')}")) und es wurde eine leere Sitzung ausgegeben. Ich habe überprüft, dass der Browser den “_forum_session” Cookie sendet, wie im vorherigen Request empfangen, und der Cookie wird im SessionController protokolliert (Rails.logger.warn("Verbose SSO log: Cookies #{cookies.map {|cookie| cookie.join('=')}.join(',')}")). -
Anmeldung schließt ab, aber der Benutzer erhält eine Anmeldefehlermeldung auf dem Bildschirm
Wenn der Benutzer zu /session/sso_login umgeleitet wird, kann SessionController die SSO-Daten verifizieren und den Benutzer anmelden (ich seheVerbose SSO log: User was logged on user5in den Protokollen). Aber wenn es den Benutzer zu /forums/latest umleitet, sieht der Benutzer einen Fehler auf dem Bildschirm. Ich habe bemerkt, dass diese Aktion im funktionierenden Ablauf den “cn” Cookie löscht/leer zurückgibt, aber im fehlschlagenden Szenario wird nur der “_t” Cookie aktualisiert und zurückgegeben. Ich vermute, dass dieses Szenario auch mit fehlenden Sitzungsdaten zusammenhängt.
Wenn wir etwa 5 Minuten warten und es erneut versuchen, funktioniert alles wieder.
Ich habe nicht getestet, ob alle Benutzer, die die Seite zu diesem Zeitpunkt aufrufen, das Problem haben, aber mir wurde anekdotisch berichtet, dass mehrere Benutzer es einmal auf unserer Instanz hatten.