Confirmando uma combinação correta de Usuário+Senha via API?

Olá a todos,

Preciso de uma orientação sobre como fazer o login de usuários em um site remoto usando o usuário e senha existentes do Discourse.

Acho que não preciso de SSO… e é o porquê.

Primeiro, um pouco de contexto sobre meu caso de uso atual e por que não gosto dele.

Atualmente, tenho um site em https://www.example.com que possui um botão de login.

Quando um usuário clica no botão de login, ele é solicitado a inserir seu nome de usuário e endereço de e-mail existentes do Discourse (nota: usuário + e-mail, NÃO uma senha).

Em seguida, pego essas duas informações e faço uma requisição de API GET para:

"https://mydiscourse.comm/admin/users/list/all.json?email=" + strEmail

Nos cabeçalhos dessa chamada de API, incluo o nome da conta do usuário “system” e a chave de API associada ao usuário do sistema.

Se for encontrada uma correspondência de endereço de e-mail, comparo o Nome de Usuário fornecido por mim no formulário com o Nome de Usuário retornado na resposta da API para aquele e-mail específico.

Se corresponder, considero que esse usuário está logado no meu site em https://www.example.com.

Construí isso há três ou quatro anos e ainda funciona bem até hoje.

Mas…

  1. É muito confuso para o usuário inserir uma combinação de Nome de Usuário + Endereço de E-mail em um formulário de login
    – A maioria das pessoas sempre insere usuário + senha
    – Apesar de instruções massivas em todo o meu formulário, as pessoas ainda naturalmente cometem erros

  2. Não é seguro
    – Basta saber o nome de usuário + o endereço de e-mail e, armado com essas duas informações (triviais), você pode fazer login em https://www.example.com “como eles” com muito pouco esforço

O que gostaria de fazer é ter o usuário clicando no botão de Login em https://www.example.com e inserindo seu Usuário + Senha existentes do Discourse (em vez de usuário + e-mail!).

Meu site em example.com então faria uma rápida requisição de API para o meu Discourse, confirmaria se a combinação de usuário/senha fornecida está correta e retornaria o ID do usuário existente do Discourse.

Espero que isso faça sentido :grimacing:

Pesquisei toda a documentação da API e, por mais que tente, não consigo encontrar um simples endpoint de “login”? :thinking:

Não preciso nem quero fazer o login ou logout das pessoas no meu próprio Discourse; simplesmente preciso confirmar se o usuário/senha deles está correto.

Qualquer orientação, dica, link ou conselho é muito bem-vindo :blush:

Não há uma rota de API que retorne a senha bruta de um usuário, então não acho que essa abordagem vá funcionar. Pela sua descrição, parece que você quer usar o Discourse como provedor de SSO para o seu site. Isso pode ser feito a funcionar. Detalhes sobre como configurar isso estão aqui: Use Discourse as an identity provider (SSO, DiscourseConnect).

Obrigado @simon - uma rápida olhada naquele link sugere que pode ser exatamente o que preciso.

Vou começar a ler :nerd_face: