Estamos executando um conjunto de serviços para uma comunidade fechada específica e decidimos incluir o Discourse como plataforma social. Gostaria de saber qual é a melhor e mais elegante maneira (tecnicamente) de integrar perfeitamente uma instância do Discourse ao nosso conjunto.
Para ilustrar, nosso conjunto inclui o serviço A e o serviço B (que desenvolvemos internamente), além de um serviço de SSO OAuth2.
Se um usuário clicar para fazer login no serviço A ou no serviço B, ele é redirecionado para o serviço de SSO, onde realiza o login e é redirecionado de volta, como de costume. No entanto, com o controle de cookies e sessões, o login no serviço A não exigirá que o usuário faça login novamente no serviço B caso decida visitá-lo posteriormente (ele já terá uma sessão ativa).
Da mesma forma, queremos uma maneira de permitir que os usuários naveguem perfeitamente para o serviço Discourse a partir do serviço A ou B após o login com o serviço de SSO. Vamos supor que o registro do usuário exista em todos os serviços. Atualmente, o plugin OAuth2 do Discourse foi avaliado e funciona com nosso serviço de SSO, mas exige que os usuários cliquem em “Entrar com SSO” novamente ao acessar o Discourse. Existe uma maneira, por exemplo, uma chamada de API, para iniciar automaticamente uma sessão no Discourse também quando os usuários fizerem login via o SSO comum a partir do Serviço A ou B?
Além disso, a questão acima se estende também à integração de comentários por meio do componente incorporado. Manter um serviço Discourse “público” não apresenta problemas na seção de comentários, e os comentários são incorporados corretamente. No entanto, se estivermos executando um serviço Discourse privado, a janela de comentários incorporada não exibirá os comentários corretamente se o usuário não tiver feito login no Discourse previamente, o que é um problema quando se fala em integração perfeita.
Existe alguma maneira de contornar esses problemas? Estava pensando em construir um plugin de middleware que decodifique um token ou cookie e autentique e faça login instantaneamente no usuário apropriado antes de realizar a chamada real. Existe algum plugin existente para isso?
Obrigado pela resposta rápida. No entanto, isso não resolve o problema. Tanto na janela de comentários do Discourse incorporada quanto ao acessar o site do Discourse, o usuário (que já está logado, por exemplo, no “serviço A” via SSO) precisará fazer login novamente.
Em ambos os casos, sou recebido com uma mensagem de boas-vindas: “Bem-vindo. Uma conta é necessária. Por favor, peça um convite a um membro existente ou faça login para continuar.” e o botão de login. Quando clico nele, a janela de login aparece e sou solicitado a fazer login com nome de usuário/senha ou via OAuth SSO. Não preciso inserir novamente o nome de usuário e a senha do meu SSO, pois a sessão do SSO ainda está ativa; no entanto, não quero que os usuários passem por isso. Quando o usuário faz login no “serviço A”, ele precisa ser automaticamente logado no Discourse também, sem precisar clicar novamente no botão “Fazer login”.
O que precisamos para alcançar isso?
Estou usando a versão 2.5.2 do Discourse, se isso for relevante.
Na versão mais recente do Discourse, desde que tanto “login obrigatório” quanto “autenticação imediata” estejam habilitados, o usuário será automaticamente logado no Discourse, desde que já possua um cookie válido no Provedor de Identidade.
Nas versões anteriores à mais recente, esse fluxo de login “mágico” era limitado a sites que usam nosso próprio protocolo SSO, descrito em Single-Sign-On Oficial para o Discourse (sso).
Hmm, estou usando imagens do Bitnami e a mais recente ainda é a 2.5.2, então provavelmente terei que esperar um pouco por isso (ou encontrar uma maneira de fazer uma atualização manual, ou usar outra imagem).
De qualquer forma, obrigado por me indicar o caminho certo. Muito obrigado!
Tenha em mente que as imagens bitnami não são suportadas pelos desenvolvedores do Discourse e, ao longo dos anos, apresentaram muitas incompatibilidades com o uso normal do software. Recomendo fortemente usar uma Instalação Padrão Oficial do Discourse.