L'accesso SSO sembra non funzionare più

Ho avuto l’integrazione SSO dal mio sito per alcuni anni senza problemi.

Recentemente gli utenti hanno iniziato a dire che quando accedono, viene reindirizzato al mio sito per l’accesso e poi torna a Discourse mostrando ancora che devono accedere. Ho cercato di eseguire il debug ma non vedo alcun problema. Sembra solo che alla fine, quando esegue il reindirizzamento all’accesso, qualcosa vada storto.

Quando guardo in Discourse, l’account utente viene creato, ma per qualche motivo non li sta effettuando l’accesso.

Ecco un breve video che mostra quello che vedo…

Ho seguito queste informazioni:

…e sto usando la libreria javascript discourse-sso più recente.

Questo è il mio AWS Lambda che è frontato da un API Gateway…

'use strict';

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

    var discourse_sso = require('discourse-sso');
    var sso = new discourse_sso("********************"); // segreto nascosto

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

    var payload = body.sso; // recupera dalla richiesta in arrivo
    var sig = body.sig; // recupera dalla richiesta in arrivo

    if(sso.validate(payload, sig)) {
        var nonce = sso.getNonce(payload);

        var userparams = {
            // Obbligatorio, altrimenti genererà un'eccezione
            "nonce": nonce,
            "external_id": body.externalId,
            "email": body.email,
            // Opzionale
            "username": body.username,
            "name": body.name
        };

        console.log("User: " + JSON.stringify(userparams));

        var q = sso.buildLoginString(userparams);

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

        // Reindirizzamento
        var response = {
            statusCode: 200,
            headers: {
                "Access-Control-Allow-Origin": "*"
            },
            body: JSON.stringify({"q":q})
        };

        callback(null, response);
    } else {
        // Cosa fare se non valida?
        var responseError = {
            statusCode: 200,
            headers: {
                "Access-Control-Allow-Origin": "*"
            },
            body: JSON.stringify({"error":"SSO Validation Error"})
        };

        callback(null, responseError);
    }
};

Quando si fa clic sul pulsante Accedi da Discourse, chiama la mia web app dove l’utente viene convalidato e poi, se la convalida ha successo, chiama quanto segue…


						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);
									}
								});
						}

Qualsiasi aiuto per capire cosa potrebbe succedere sarebbe apprezzato.

Questo è molto probabilmente causato da un bug in Chrome 97, rilasciato questo mese. In attesa che Google rilasci una correzione, abbiamo aggiunto una soluzione temporanea a Discourse. L’aggiornamento del tuo sito all’ultima versione dovrebbe risolvere il problema.

3 Mi Piace

Purtroppo sto usando un provider di hosting. Ci sono altre soluzioni? Se disattivo temporaneamente l’SSO da Discourse e poi lo riattivo quando sarà risolto, causerà problemi? Presumo che in quel caso gli utenti dovranno creare manualmente un account. Quando lo riabilito, sono curioso di sapere se creerà un nuovo account associato al mio sistema.

Temo di no. Il nostro hosting gestito discourse.org è aggiornato. Puoi condividere quale provider stai usando? Potremmo essere in grado di metterci in contatto e informarli dell’aggiornamento.

Se gli indirizzi email corrispondono, dovrebbe funzionare senza problemi. Inizialmente, gli utenti dovranno utilizzare il pulsante “password dimenticata” per creare una password.

1 Mi Piace

@jeffbonasso Ti vedo ospitato con noi, cercheremo una soluzione per te. Puoi creare un ticket utilizzando il nostro pannello di controllo, facendo riferimento a questo argomento?

No, funzionerebbe. Se lo riattivi, l’SSO riconoscerà l’indirizzo email.
Ma gli utenti esistenti potrebbero avere difficoltà ad accedere, poiché non hanno una password diretta per il forum.

@david Posso chiedere - quale commit di Discourse contiene quella correzione?

1 Mi Piace

Per il branch stabile, questa è la correzione:

Esiste un commit simile anche sui branch beta e tests-passed.

2 Mi Piace

Grazie David,

Quella correzione è già presente sul tuo forum dal 13 gennaio @jeffbonasso, quindi non può essere questa (o i report che hai ricevuto sono precedenti a quella data?)

1 Mi Piace

Il video che ho creato è stato realizzato con un utente di prova che ho creato stamattina e il comportamento è stato coerente con quello che stava riscontrando un cliente. Interessante, ho appena provato ad accedere con Safari e ha funzionato. Ho poi riprovato con Chrome e anche quello ora funziona. La versione di Chrome che ho appena testato è la versione 97.0.4692.99 (Build ufficiale) (x86_64). Contatterò un cliente che stava riscontrando problemi per vedere se li sta ancora riscontrando.

2 Mi Piace

Per tua informazione… il cliente ha segnalato che sta utilizzando il browser Brave, un derivato di Chrome. Ha detto che non funziona ancora. Ha poi provato Edge e funziona.

la nostra soluzione alternativa è specifica per Chrome, potremmo dover estendere la rete qui @Falco / @david

mi chiedo se dovremmo aggiungere un’impostazione del sito per disabilitare i service worker che le persone possono attivare se riscontrano problemi come questo?

È già stato corretto nell’ultima versione di Chrome dal 2022-01-19T03:00:00Z quindi credo che i derivati di Chrome seguiranno a breve poiché la release con questa correzione, 97.0.4692.99, include anche una correzione critica e 15 correzioni di sicurezza elevate.

2 Mi Piace

Abbiamo applicato la correzione DiscourseConnect su tutti i browser. La successiva correzione globale era specifica per Chrome, ma dovrebbe anche riguardare Edge/Brave grazie alle loro stringhe user agent:

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'

E Brave apparentemente non personalizza la stringa user agent predefinita di Chrome

3 Mi Piace