Sporadische DiscourseSSO-Anmeldeprobleme mit abgelaufenem Nonce

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:

  1. 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(',')}")).

  2. 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 sehe Verbose SSO log: User was logged on user5 in 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.

Hallo!

Was verwenden Sie für die Unterordner-Einrichtung? Wenn Sie eine Web Application Firewall vor Discourse haben, könnte es sich lohnen, nach Caching-Problemen zu suchen. Nach unserer Erfahrung ist das das Erste, was man ausschließen sollte.

Vielen Dank für Ihre Antwort Leonardo. Wir verwenden nginx als unser Haupt-Gateway, das pfadbasierten URLs an das nginx im Discourse-Container sendet.

Ich habe diese beiden Zeilen am Anfang von session_controller.rb/sso und session_controller.rb/sso_login hinzugefügt

    if SiteSetting.verbose_discourse_connect_logging
      Rails.logger.warn("Verbose SSO log: Cookies #{cookies.map {|cookie| cookie.join('=')}.join(',')}")
      Rails.logger.warn("Verbose SSO log: Session #{session.keys.map {|key| [key, session[key]].join('=')}.join(',')}")
    end

Für das erste oben genannte Fehlerszenario erhielt ich Folgendes für /sso (auf Knoten1 des Multi-Knoten-Clusters)

Verbose SSO log: Cookies cn=12,_forum_session=ZjBveGorRVN1bU0zeGRKVHZtWUZDamUxTUJSUkJHUDZDaHhLMkh3U0lXMlpCYS9PTnpJWEovcTlZVDFTSTJuNkVNUE9NdlNvVWlidStIdk9SeTlRYzZ5YVp0N0pXdmhnTldlaSt4d1o3TC9mUm1nSUhsOUtiWFRyVGZBYkJLRHRRR0lFZmM0RkVxLzl0V2JEODR4NGMxQUJvOGhpdVc0c2JsdDFESHo2TWxJPS0tRXZTL0FHZlM1Yy9QVWJkc2xaaTYvUT09--36fa626c698a401db1e7f13276ee6bfde16dea77,sessid=6b4afa7755dc9aa54e3fb16453a28324,<ADDITIONAL_COOKIES_REDACTED>
Verbose SSO log: Session
Verbose SSO log: Setting nonce 8199453c67e347124ecb2e57e5738336 with key SSO_NONCE_8199453c67e347124ecb2e57e5738336

und Folgendes für /sso_login (auf Knoten2 des Multi-Knoten-Clusters)

Verbose SSO log: Cookies cn=12,_forum_session=WFRkNThYYUZwUnlOQjF5VHdUZGRUWE1UNUx2a3Z5ZlJCOGl0VFRRUlF2bm5vQUQzMWdaUVZVUnJkNmdIUjlRTE52d1B5MXJnV0svWkJMRWZrOU5XellvV0IzMTBScERwM0lzT3VIUWc2SEppb2xpTlkxaFpuc1dvU2d4SkdZRXFYYjJzakRQTXFmS2lYTlhxVEd5Zi9nQ3dZQnVUR1pDSndScGZhcVNJOW1ZPS0tNFduSE1YRDk5cWdMRXNsWnBzbDVhZz09--00ab1b89ff4cf05c9f3f3ed71eec9c0c4557f032,sessid=6b4afa7755dc9aa54e3fb16453a28324,<ADDITIONAL_COOKIES_REDACTED>
Verbose SSO log: Session
Verbose SSO log: Checking nonce 8199453c67e347124ecb2e57e5738336 with key SSO_NONCE_8199453c67e347124ecb2e57e5738336
Verbose SSO log: Nonce is incorrect, was generated in a different browser session, or has expired

Auf dem Redis-Server sehe ich den Nonce-Schlüssel

redis:6379[3]> KEYS "*NONCE*"
1) "default:3aa05452fdd8fd4a93481eb8afa90f3aSSO_NONCE_8199453c67e347124ecb2e57e5738336"
2) "default:21639ca4bef85f68c1d72824e3a49bd6SSO_NONCE_7d54c965762e6861799f62ef7c5cfa60"
3) "default:_CACHE:USED_SSO_NONCE_86886a948684ff110d4830919d4e6de5"
4) "default:_CACHE:USED_SSO_NONCE_d04fdbf483fe61129a6fcc54087cb4e4"
5) "default:f7c87c11539908b30f9e307ef05d3f18SSO_NONCE_90a6a6997b7bd5d75eac1ac0cfc6dee2"

Meine Sorge ist, dass Session für /sso_login leer ist.

Ich stoße das Thema an, falls jemand Vorschläge hat.

Ist die Seite zufällig öffentlich? Es wäre hilfreich, wenn wir sie online debuggen könnten.

2 „Gefällt mir“

Ja, das ist es, ich werde die Adresse in einer privaten Nachricht senden.

Update: per privater Nachricht gesendet

1 „Gefällt mir“

Funktioniert die Anmeldung für alle Benutzer gleichzeitig nicht mehr? Oder tritt dies zu unterschiedlichen Zeiten für jeden Benutzer auf?

Die Tatsache, dass es nach einiger Zeit wieder funktioniert, lässt mich vermuten, dass ein Cache involviert ist. Führt Ihre NGINX-Konfiguration oder ein anderer zwischengeschalteter Proxy (z. B. Cloudflare) eine Art von Caching durch?

Es bricht für alle Benutzer für diese kurze Dauer. Meine erste Vermutung war, dass ein Zwischenknoten die Daten manipuliert, aber als ich die Cookies vom Controller (wie oben erklärt) protokolliert habe, konnte ich die Cookies sehen. Gibt es noch etwas, das ich überprüfen sollte?

Ich greife das Thema noch einmal auf.

3 Beiträge wurden zu einem neuen Thema aufgeteilt: WordPress DiscourseConnect-Client – abgelaufener Nonce

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.