Fluxo de Conexão do Discourse

Estamos buscando construir uma comunidade usando APIs do Discourse. Estamos enfrentando um problema no fluxo.

Nosso Front-end é um aplicativo React e o Back-end é baseado em NodeJS com uma arquitetura de microsserviços. Gerenciamos todo o fluxo de autenticação em nosso sistema.

Pelo que entendi do Discourse Connect, o fluxo é:

  1. O Front-end cria o payload, com um nonce, informações do usuário e, em seguida, faz uma chamada para example.com/session/SSO?sso=xx&sig=xx.

  2. O Discourse, então, faz uma chamada de volta para o discourse_connect_url, onde validarei o payload e retornarei a URL de redirecionamento, e os usuários serão redirecionados para o Discourse.

No entanto, quando crio o payload com informações do usuário, não consigo propagá-lo do meu Front-end para o Discourse e, em seguida, para o Back-end. Alguém pode me ajudar ou meu entendimento está correto? Pesquisei no fórum também com soluções esperadas, mas sem sucesso.

Note que, quando eu defino informações de usuário fixas (hardcoded) do Back-end, consigo logar usuários no Discourse.

Quero que nosso site seja o provedor de autenticação para o Discourse e que as informações do usuário sejam propagadas do Front-end para o Back-end. Alguém pode me ajudar com o fluxo ou talvez com alguns exemplos para Javascript?

1 curtida

Olá Ankit,

O fluxo é, na verdade, o inverso do que você descreveu. Quando você configura o Discourse Connect em seu site:

  1. Clicar no botão de login o levará para discourse_connect_url com 2 parâmetros GET sso e sig.
  2. O usuário inserirá suas credenciais em discourse_connect_url e será autenticado por seu site. Se a autenticação for bem-sucedida, você precisará decodificar o sso e seguir os próximos passos descritos no tópico Discourse Connect.

Tenho um problema de fluxo semelhante, não quero que meu usuário acesse o Discourse e clique em login, preciso que meu usuário acesse minha plataforma e clique no botão Acessar Discourse e acesse o Discourse de forma transparente.

É possível que minha plataforma gere um ‘nonce’ para meu usuário usando api de forma segura, sem que ele precise acessar o Discourse antes e clicar em login?

Observação: Posso fazer isso sozinho acessando o Discourse e clicando no botão para eles, sem que eles saibam, mas isso não é seguro para a aplicação.

A opção mais simples é fazer com que o botão “Acessar Discourse” seja um link para /login no fórum.