Login SSO parece ter parado de funcionar

Integro o SSO ao meu site há alguns anos sem problemas.

Recentemente, os usuários começaram a dizer que, ao fazer login, ele redireciona para o meu site para fazer login e, em seguida, volta para o Discourse, ainda mostrando que precisam fazer login. Tenho tentado depurar, mas não estou vendo nenhum problema. Parece que, no final, quando faz o redirecionamento para o login, algo está dando errado.

Quando olho no Discourse, a conta do usuário é criada, mas por algum motivo não está logando eles.

Aqui está um vídeo rápido mostrando o que estou vendo…

Segui estas informações:

…e estou usando a biblioteca javascript discourse-sso mais recente.

Esta é a minha AWS Lambda, que é frontada por um API Gateway…

'use strict';

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

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

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

    var payload = body.sso; // buscar da requisição de entrada
    var sig = body.sig; // buscar da requisição de entrada

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

        var userparams = {
            // Obrigatório, caso contrário lançará uma exceção
            "nonce": nonce,
            "external_id": body.externalId,
            "email": body.email,
            // Opcional
            "username": body.username,
            "name": body.name
        };

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

        var q = sso.buildLoginString(userparams);

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

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

        callback(null, response);
    } else {
        // O que fazer se não validar?
        var responseError = {
            statusCode: 200,
            headers: {
                "Access-Control-Allow-Origin": "*"
            },
            body: JSON.stringify({"error":"SSO Validation Error"})
        };

        callback(null, responseError);
    }
};

Quando o botão Login é clicado no Discourse, ele chama meu aplicativo web onde o usuário é validado e, em seguida, se a validação for bem-sucedida, chama o seguinte…


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

Qualquer ajuda para entender o que pode estar acontecendo seria apreciada.

Isso é muito provavelmente causado por um bug no Chrome 97, que foi lançado este mês. Enquanto esperamos o Google lançar uma correção, adicionamos uma solução alternativa ao Discourse. Atualizar seu site para a versão mais recente deve resolver o problema.

3 curtidas

Infelizmente, estou usando um provedor de hospedagem. Alguma outra solução? Se eu desativar o SSO temporariamente no Discourse e depois reativar quando corrigido, isso causará algum problema? Presumo que os usuários teriam que criar uma conta manualmente nesse caso. Quando eu reativar, fico curioso se isso criará uma nova conta associada ao meu sistema.

Receio que não. Nossa hospedagem gerenciada discourse.org está atualizada. Você pode compartilhar qual provedor você está usando? Talvez possamos entrar em contato e informá-los sobre a atualização.

Se os endereços de e-mail corresponderem, funcionará perfeitamente. Inicialmente, os usuários precisarão usar o botão “esqueci minha senha” para criar uma senha.

1 curtida

@jeffbonasso Vejo que você está hospedado conosco, vamos procurar uma solução para você. Você pode, por favor, criar um ticket usando nosso painel de controle, referindo-se a este tópico?

Não, isso funcionaria. Se você o reativar, o SSO reconhecerá o endereço de e-mail.
Mas os usuários existentes podem ter dificuldade em fazer login, pois eles não têm uma senha diretamente para o fórum.

@david Posso perguntar - qual commit do Discourse contém essa correção?

1 curtida

Para o branch estável, esta é a correção:

Há um commit semelhante nos branches beta e tests-passed também.

2 curtidas

Obrigado David,

Essa correção já está presente no seu fórum desde 13 de janeiro @jeffbonasso, então não pode ser isso (ou os relatórios que você obteve são de antes dessa data?)

1 curtida

O vídeo que criei foi com um usuário de teste que criei esta manhã e o comportamento foi consistente com o que um cliente estava experimentando. Interessante, acabei de tentar fazer login com o Safari e funcionou. Em seguida, tentei o Chrome novamente e isso também está funcionando agora. A versão do Chrome que acabei de testar é a Versão 97.0.4692.99 (Build oficial) (x86_64). Vou entrar em contato com um cliente que estava tendo problemas para ver se eles ainda estão tendo problemas.

2 curtidas

FYI…o cliente relatou que está usando o navegador Brave, um derivado do Chrome. Ele disse que ainda não está funcionando. Ele então tentou o Edge e está funcionando.

nosso bypass é específico do Chrome, podemos precisar estender a rede aqui @Falco / @david

Gostaria de saber se devemos adicionar uma configuração de site para desativar service workers que as pessoas possam ativar se tiverem problemas como este?

Já está corrigido na versão mais recente do Chrome desde 2022-01-19T03:00:00Z então acredito que os derivados do Chrome seguirão em breve, pois a versão com essa correção, 97.0.4692.99, também inclui uma correção crítica e 15 correções de segurança de alta prioridade.

2 curtidas

Aplicamos o correção do DiscourseConnect em todos os navegadores. A correção global posterior foi específica para o Chrome, mas também deve atingir o Edge/Brave graças às suas strings de 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 o Brave aparentemente não personaliza o user agent padrão do Chrome

3 curtidas