El inicio de sesión SSO parece haber dejado de funcionar

He tenido integración SSO en mi sitio durante algunos años sin problemas.

Recientemente, los usuarios comenzaron a decir que cuando inician sesión, se les redirige a mi sitio para iniciar sesión y luego vuelven a Discourse, todavía mostrando que necesitan iniciar sesión. He estado tratando de depurar, pero no veo ningún problema. Simplemente parece que al final, cuando realiza la redirección para iniciar sesión, algo sale mal.

Cuando miro en Discourse, la cuenta de usuario se crea, pero por alguna razón no los inicia sesión.

Aquí hay un video rápido que muestra lo que estoy viendo…

Seguí esta información:

…y estoy usando la última biblioteca de javascript discourse-sso.

Este es mi AWS Lambda, que está frente a una API Gateway…

'use strict';

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

    var discourse_sso = require('discourse-sso');
    var sso = new discourse_sso("********************"); // secreto oculto

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

    var payload = body.sso; // obtener de la solicitud entrante
    var sig = body.sig; // obtener de la solicitud entrante

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

        var userparams = {
            // Requerido, de lo contrario lanzará una excepción
            "nonce": nonce,
            "external_id": body.externalId,
            "email": body.email,
            // Opcional
            "username": body.username,
            "name": body.name
        };

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

        var q = sso.buildLoginString(userparams);

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

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

        callback(null, response);
    } else {
        // ¿Qué hacer si no valida?
        var responseError = {
            statusCode: 200,
            headers: {
                "Access-Control-Allow-Origin": "*"
            },
            body: JSON.stringify({"error":"Error de validación SSO"})
        };

        callback(null, responseError);
    }
};

Cuando se hace clic en el botón Iniciar sesión desde Discourse, llama a mi aplicación web donde se valida al usuario y luego, si la validación es exitosa, llama a lo siguiente…


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

Agradecería cualquier ayuda para entender qué podría estar pasando.

Esto es muy probablemente causado por un error en Chrome 97, que fue lanzado este mes. Mientras esperamos que Google implemente una solución, hemos añadido una solución alternativa en Discourse. Actualizar tu sitio a la última versión debería resolver el problema.

3 Me gusta

Lamentablemente, estoy utilizando un proveedor de alojamiento. ¿Alguna otra solución? Si desactivo SSO temporalmente en Discourse y luego lo vuelvo a activar cuando esté arreglado, ¿eso causará algún problema? Supongo que los usuarios tendrían que crear una cuenta manualmente en ese caso. Cuando lo reactive, tengo curiosidad si creará una nueva cuenta asociada a mi sistema.

Me temo que no. Nuestro alojamiento administrado de discourse.org está actualizado. ¿Puedes compartir qué proveedor estás utilizando? Podríamos ponernos en contacto y avisarles sobre la actualización.

Si las direcciones de correo electrónico coinciden, debería funcionar sin problemas. Inicialmente, los usuarios deberán usar el botón “olvidé mi contraseña” para crear una contraseña.

1 me gusta

@jeffbonasso Veo que está alojado con nosotros, vamos a buscar una solución para usted. ¿Puede crear un ticket usando nuestro panel de control, haciendo referencia a este tema?

No, eso funcionaría. Si lo vuelve a activar, el SSO reconocerá la dirección de correo electrónico.
Pero los usuarios existentes podrían tener dificultades para iniciar sesión, ya que no tienen una contraseña directamente para el foro.

@david ¿Puedo preguntar, qué commit de Discourse contiene esa corrección?

1 me gusta

Para la rama estable, esta es la corrección:

Hay una corrección similar en beta y tests-passed también.

2 Me gusta

Gracias David,

Esa corrección ya está presente en tu foro desde el 13 de enero @jeffbonasso, así que no puede ser eso (¿o los informes que recibiste son de antes de esa fecha?)

1 me gusta

El video que creé fue con un usuario de prueba que creé esta mañana y el comportamiento fue consistente con lo que estaba experimentando un cliente. Curiosamente, acabo de intentar iniciar sesión con Safari y funcionó. Luego volví a intentarlo con Chrome y eso también está funcionando ahora. La versión de Chrome que acabo de probar es la versión 97.0.4692.99 (compilación oficial) (x86_64). Me pondré en contacto con un cliente que estaba teniendo problemas para ver si todavía los tiene.

2 Me gusta

Para tu información… el cliente informó que está usando el navegador Brave, un derivado de Chrome. Dijo que todavía no funciona. Luego probó Edge y sí funciona.

nuestro bypass es específico de Chrome, puede que necesitemos extender la red aquí @Falco / @david

Me pregunto si deberíamos agregar una configuración del sitio para deshabilitar los service workers que las personas puedan activar si experimentan problemas como este.

Ya está corregido en la última versión de Chrome desde el 2022-01-19T03:00:00Z por lo que creo que los derivados de Chrome seguirán en breve ya que la versión con esta corrección, 97.0.4692.99, también incluye una corrección de seguridad crítica y 15 de alta prioridad.

2 Me gusta

Aplicamos la corrección de DiscourseConnect en todos los navegadores. La posterior corrección global fue específica para Chrome, pero también debería dirigirse a Edge/Brave gracias a sus cadenas de agente de usuario:

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'

Y Brave aparentemente no personaliza el agente de usuario predeterminado de Chrome

3 Me gusta