SSO-Anmeldung scheint nicht mehr zu funktionieren

Ich habe seit einigen Jahren eine SSO-Integration von meiner Website, ohne Probleme.

Kürzlich sagten Benutzer, dass sie, wenn sie sich anmelden, zu meiner Website weitergeleitet werden, um sich anzumelden, und dann wieder bei Discourse landen, wo sie immer noch aufgefordert werden, sich anzumelden. Ich habe versucht, das Problem zu beheben, aber ich sehe keine Probleme. Es scheint einfach so zu sein, dass am Ende, wenn die Weiterleitung zur Anmeldung erfolgt, etwas schief geht.

Wenn ich in Discourse nachsehe, ist das Benutzerkonto erstellt, aber aus irgendeinem Grund wird es nicht angemeldet.

Hier ist ein kurzes Video, das zeigt, was ich sehe…

Ich habe diese Informationen befolgt:

…und verwende die neueste discourse-sso-JavaScript-Bibliothek.

Dies ist meine AWS Lambda, die von einem API Gateway vorangestellt ist…

'use strict';

exports.handler = (event, context, callback) => {
    console.log(event);

    var discourse_sso = require('discourse-sso');
    var sso = new discourse_sso("********************"); // Geheimnis verborgen

    var body = JSON.parse(event.body);

    var payload = body.sso; // aus eingehendem Request abrufen 
    var sig = body.sig; // aus eingehendem Request abrufen 
    
    if(sso.validate(payload, sig)) {
        var nonce = sso.getNonce(payload);
        
        var userparams = {
            // Erforderlich, sonst wird eine Ausnahme ausgelöst 
            "nonce": nonce,
            "external_id": body.externalId,
            "email": body.email,
            // Optional 
            "username": body.username,
            "name": body.name
        };
        
        console.log("User: " + JSON.stringify(userparams));
        
        var q = sso.buildLoginString(userparams);

        console.log("q: " + q);

        // Weiterleitung
        var response = {
            statusCode: 200,
            headers: {
                "Access-Control-Allow-Origin": "*"
            },
            body: JSON.stringify({"q":q})
        };
        
        callback(null, response);
    } else {
        // Was tun, wenn die Validierung fehlschlägt?
        var responseError = {
            statusCode: 200,
            headers: {
                "Access-Control-Allow-Origin": "*"
            },
            body: JSON.stringify({"error":"SSO Validation Error"})
        };

        callback(null, responseError);
    }
};

Wenn der Anmeldebutton von Discourse geklickt wird, ruft er meine Webanwendung auf, wo der Benutzer validiert wird und dann, wenn die Validierung erfolgreich ist, Folgendes aufruft…

						if (state.get(["appState", "urlParams", "sso"]) && state.get(["appState", "urlParams", "sig"])) {
							var userMetadata = getUserMetadata(result);

							var body = {
								sso: state.get(["appState", "urlParams", "sso"]),
								sig: state.get(["appState", "urlParams", "sig"]),
								externalId: keyPrefix,
								email: userMetadata.email,
								name: userMetadata.name,
								username: username
							};

							request
								.post('https://**********.execute-api.us-east-1.amazonaws.com/prod/discourse-sso')
								.send(body)
								.end(function (err, res) {
									if (err || !res.ok) {
										alert(err.message);
									} else {
window.location.replace("https://forum.miralouaero.com/session/sso_login?" + res.body.q);
									}
								});
						}

Jede Hilfe beim Verständnis, was vor sich gehen könnte, wäre willkommen.

Dies wird höchstwahrscheinlich durch einen Fehler in Chrome 97 verursacht, der diesen Monat veröffentlicht wurde. Während wir darauf warten, dass Google eine Korrektur bereitstellt, haben wir eine Problemumgehung für Discourse hinzugefügt. Ein Upgrade Ihrer Website auf die neueste Version sollte das Problem beheben.

3 „Gefällt mir“

Leider nutze ich einen Hosting-Anbieter. Gibt es andere Workarounds? Wenn ich SSO vorerst bei Discourse deaktiviere und es dann wieder aktiviere, wenn es behoben ist, wird das dann Chaos anrichten? Ich gehe davon aus, dass Benutzer in diesem Fall manuell ein Konto erstellen müssten. Wenn ich es wieder aktiviere, bin ich neugierig, ob dann ein neues Konto erstellt wird, das mit meinem System verknüpft ist.

Ich fürchte nicht. Unser Managed Discourse.org-Hosting ist auf dem neuesten Stand. Können Sie uns mitteilen, welchen Anbieter Sie verwenden? Wir können uns vielleicht mit ihnen in Verbindung setzen und sie über das Update informieren.

Wenn die E-Mail-Adressen übereinstimmen, sollte es nahtlos funktionieren. Zunächst müssen die Benutzer die Schaltfläche „Passwort vergessen“ verwenden, um ein Passwort zu erstellen.

1 „Gefällt mir“

@jeffbonasso Ich sehe, dass Sie bei uns gehostet werden. Wir werden eine Lösung für Sie finden. Können Sie bitte über unser Control Panel ein Ticket erstellen und sich auf dieses Thema beziehen?

Nein, das würde funktionieren. Wenn Sie es wieder aktivieren, erkennt die SSO die E-Mail-Adresse.
Bestehende Benutzer könnten jedoch Schwierigkeiten beim Einloggen haben, da sie kein Passwort für das Forum direkt haben.

@david Darf ich fragen - welcher Discourse-Commit enthält diese Korrektur?

1 „Gefällt mir“

Für den stabilen Zweig ist dies die Korrektur:

Es gibt einen ähnlichen Commit auf Beta und Tests-bestanden.

2 „Gefällt mir“

Danke David,

Diese Korrektur ist bereits seit dem 13. Januar in deinem Forum vorhanden, @jeffbonasso, das kann es also nicht sein (oder stammen die Berichte, die du erhalten hast, von vor diesem Datum?).

1 „Gefällt mir“

Das Video, das ich erstellt habe, war mit einem Testbenutzer, den ich heute Morgen erstellt habe, und das Verhalten war konsistent mit dem, was ein Kunde erlebte. Interessanterweise habe ich gerade versucht, mich mit Safari anzumelden, und es hat funktioniert. Ich habe es dann noch einmal mit Chrome versucht und auch das funktioniert jetzt. Die Chrome-Version, mit der ich gerade getestet habe, ist Version 97.0.4692.99 (Offizieller Build) (x86_64). Ich werde mich mit einem Kunden in Verbindung setzen, der Probleme hatte, um zu sehen, ob er immer noch Probleme hat.

2 „Gefällt mir“

FYI…der Kunde berichtete, dass er den Brave-Browser, ein Chrome-Derivat, verwendet. Er sagte, dass es immer noch nicht funktioniert. Dann versuchte er es mit Edge und es funktioniert.

Unser Umweg ist Chrome-spezifisch, wir müssen hier möglicherweise das Netz erweitern @Falco / @david

Ich frage mich, ob wir eine Website-Einstellung hinzufügen sollten, um Service Worker zu deaktivieren, die Leute aktivieren können, wenn sie solche Probleme haben?

Es ist bereits in der neuesten Chrome-Version seit dem 2022-01-19T03:00:00Z behoben, daher glaube ich, dass die Chrome-Derivate kurz darauf folgen werden, da die Version mit dieser Korrektur, 97.0.4692.99, auch eine kritische und 15 hochrangige Sicherheitskorrekturen enthält.

2 „Gefällt mir“

Wir haben den DiscourseConnect-Fix für alle Browser angewendet. Die spätere globale Korrektur war spezifisch für Chrome, sollte aber dank ihrer User-Agent-Strings auch Edge/Brave ansprechen:

Edge: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36 Edg/97.0.1072.55'

Und Brave passt anscheinend den Standard-Chrome-User-Agent nicht an

3 „Gefällt mir“