La connexion SSO semble avoir cessé de fonctionner

J’ai une intégration SSO sur mon site depuis quelques années maintenant, sans problème.

Récemment, les utilisateurs ont commencé à dire que lorsqu’ils se connectent, cela les redirige vers mon site pour se connecter, puis revient à Discourse, leur indiquant toujours qu’ils doivent se connecter. J’ai essayé de déboguer, mais je ne vois aucun problème. Il semble simplement qu’à la fin, lorsque la redirection vers la connexion s’effectue, quelque chose ne va pas.

Lorsque je regarde dans Discourse, le compte utilisateur est créé, mais pour une raison quelconque, il ne les connecte pas.

Voici une courte vidéo montrant ce que je vois…

J’ai suivi ces informations :

…et j’utilise la dernière bibliothèque JavaScript discourse-sso.

Voici mon AWS Lambda, qui est fronté par une API Gateway…

'use strict';

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

    var discourse_sso = require('discourse-sso');
    var sso = new discourse_sso("********************"); // secret caché

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

    var payload = body.sso; // récupérer de la requête entrante
    var sig = body.sig; // récupérer de la requête entrante

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

        var userparams = {
            // Requis, sinon une exception sera levée
            "nonce": nonce,
            "external_id": body.externalId,
            "email": body.email,
            // Optionnel
            "username": body.username,
            "name": body.name
        };

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

        var q = sso.buildLoginString(userparams);

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

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

        callback(null, response);
    } else {
        // Que faire si la validation échoue ?
        var responseError = {
            statusCode: 200,
            headers: {
                "Access-Control-Allow-Origin": "*"
            },
            body: JSON.stringify({"error":"Erreur de validation SSO"})
        };

        callback(null, responseError);
    }
};

Lorsque le bouton Connexion est cliqué depuis Discourse, il appelle mon application web où l’utilisateur est validé, puis si la validation réussit, il appelle ce qui suit…

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

Toute aide pour comprendre ce qui pourrait se passer serait appréciée.

Ceci est très probablement causé par un bug dans Chrome 97, qui est sorti ce mois-ci. En attendant que Google déploie un correctif, nous avons ajouté une solution de contournement à Discourse. La mise à niveau de votre site vers la dernière version devrait résoudre le problème.

3 « J'aime »

Malheureusement, j’utilise un fournisseur d’hébergement. D’autres solutions de contournement ? Si je désactive le SSO temporairement de Discourse, puis que je le réactive une fois corrigé, cela causera-t-il des problèmes ? Je suppose que les utilisateurs devront créer un compte manuellement dans ce cas. Lorsque je le réactiverai, je me demande si cela créera un nouveau compte associé à mon système.

Je crains que non. Notre hébergement géré discourse.org est à jour. Pouvez-vous nous dire quel fournisseur vous utilisez ? Nous pourrions peut-être les contacter pour les informer de la mise à jour.

Si les adresses e-mail correspondent, cela devrait fonctionner sans problème. Initialement, les utilisateurs devront utiliser le bouton « Mot de passe oublié » pour créer un mot de passe.

1 « J'aime »

@jeffbonasso Je vois que vous êtes hébergé chez nous, nous allons chercher une solution pour vous. Pouvez-vous s’il vous plaît créer un ticket en utilisant notre panneau de contrôle, en faisant référence à ce sujet ?

Non, cela fonctionnerait. Si vous le réactivez, le SSO reconnaîtra l’adresse e-mail.
Mais les utilisateurs existants pourraient avoir du mal à se connecter, car ils n’ont pas de mot de passe directement pour le forum.

@david Puis-je demander - quel commit de Discourse contient ce correctif ?

1 « J'aime »

Pour la branche stable, voici le correctif :

Il existe un commit similaire sur les branches beta et tests-passed également.

2 « J'aime »

Merci David,

Cette correction est déjà présente sur votre forum depuis le 13 janvier @jeffbonasso, donc ce ne peut pas être ça (ou les rapports que vous avez obtenus datent d’avant cette date ?)

1 « J'aime »

La vidéo que j’ai créée l’a été avec un utilisateur de test que j’ai créé ce matin et le comportement était cohérent avec ce qu’un client rencontrait. Intéressant, je viens d’essayer de me connecter avec Safari et cela a fonctionné. J’ai ensuite réessayé avec Chrome et cela fonctionne également maintenant. La version de Chrome que je viens de tester est la version 97.0.4692.99 (Build officielle) (x86_64). Je vais contacter un client qui avait des problèmes pour voir s’il en a toujours.

2 « J'aime »

Pour information… le client a signalé qu’il utilisait le navigateur Brave, un dérivé de Chrome. Il a dit que cela ne fonctionnait toujours pas. Il a ensuite essayé Edge et cela fonctionne.

notre contournement est spécifique à Chrome, nous pourrions avoir besoin d’étendre le réseau ici @Falco / @david

Je me demande si nous devrions ajouter un paramètre de site pour désactiver les service workers que les gens peuvent activer s’ils rencontrent des problèmes comme celui-ci ?

C’est déjà corrigé dans la dernière version de Chrome depuis le 2022-01-19T00:00:00Z donc je pense que les dérivés de Chrome suivront peu de temps après car la version avec cette correction, 97.0.4692.99, inclut également une correction critique et 15 corrections de sécurité élevées.

2 « J'aime »

Nous avons appliqué le correctif DiscourseConnect sur tous les navigateurs. Le correctif global ultérieur était spécifique à Chrome, mais il devrait également cibler Edge/Brave grâce à leurs chaînes d’agent utilisateur :

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'

Et Brave ne personnalise apparemment pas l’agent utilisateur Chrome par défaut https://community.brave.com/t/when-will-brave-get-its-own-user-agent/209343

3 « J'aime »