Se você sempre quis usar o Discourse como seu provedor de autenticação, agora pode!
Na última semana, criei um pequeno serviço que pode atuar como um provedor OpenID Connect/OAuth com o Discourse como backend.
Você pode conferir o código aqui:
Note que meu caso de uso principal era autenticar no Nextcloud usando o Discourse, então pode não funcionar para o seu caso de uso.
Se algo não estiver funcionando como esperado, ou se faltar aquele recurso específico para fazê-lo funcionar para você, sinta-se à vontade para criar uma issue no repositório do GitHub.
Ótima iniciativa! Sempre quis que o Discourse fosse utilizável como provedor de OAuth, para que pudesse ser facilmente integrado com mais ferramentas. Transformá-lo em um serviço externo pequeno também faz muito sentido!
Gosto da ideia e espero que algumas comunidades decidam experimentá-la!
Adoraria ver o OIDC suportado oficialmente pelo Discourse, além da nossa funcionalidade personalizada Discourse Connect, para que possamos oferecer uma solução pronta para uso aos nossos clientes nos planos Standard e Teams, sem precisar depender do Okta ou similares.
O Distrust é um serviço independente, então você precisa implantá-lo como tal. Você pode executá-lo em um container, conforme descrito no arquivo README. Observe que, para operação segura, você também precisará de um proxy reverso que gerencie a terminação SSL (posso implementar isso diretamente em algum momento no futuro).
{“content”:“Espero obter a opinião de especialistas sobre os problemas que estou enfrentando ao tentar usar o Discourse como um provedor de SSO.\n\nMeu Objetivo: Estou configurando o Discourse para lidar com a autenticação de outro aplicativo (LibreChat). Estou usando a funcionalidade padrão do provedor DiscourseConnect, com o serviço de ponte OIDC distrust agindo como o cliente que se comunica com o Discourse.\n\nO Problema: O fluxo de SSO funciona perfeitamente até a última etapa. O usuário é redirecionado corretamente do meu aplicativo para o Discourse, e eles conseguem fazer login com sucesso usando suas credenciais do Discourse. No entanto, após o login, eles são redirecionados para a página inicial do meu fórum Discourse (/) em vez de voltar para o return_sso_url que foi fornecido.\n\nOnde Estou Empacado (O Que Eu Já Descartei): Tenho solucionado este problema há algum tempo e confirmei que não se trata de um erro de configuração simples. Eu definitivamente descartei o seguinte:\n\n* Segredos: Os segredos do provedor discourse connect estão configurados corretamente. Estou usando o domínio simples (por exemplo, auth.my-site.com) sem nenhum protocolo, e a chave secreta corresponde perfeitamente à do meu serviço cliente.\n* Modo SSO: Confirmei que habilitar provedor discourse connect está marcado, e as configurações incorretas de "Cliente SSO" estão desabilitadas.\n* Políticas de Usuário: Certifiquei-me de que must_approve_users está desabilitado, e meu usuário de teste é um administrador com um e-mail totalmente verificado.\n* Plugins: Desabilitei todos os plugins de terceiros não oficiais e reconstruí o contêiner, mas o problema persiste.\n\nA Evidência Chave: Tenho duas evidências definitivas que me deixaram perplexo:\n\n1. Análise do Arquivo HAR: Capturei todo o fluxo de rede em um arquivo HAR. Ele mostra que a solicitação POST para /session para login é bem-sucedida. O servidor responde imediatamente com um redirecionamento 302 Found, mas o cabeçalho Location é consistentemente /. Isso prova que o Discourse está intencionalmente abortando o redirecionamento SSO.\n2. Log Rails Vazio: Em seguida, acompanhei o arquivo production.log dentro do contêiner enquanto tentava um login. Absolutamente nada é escrito no log durante este processo. Isso me diz que o Discourse não vê isso como um erro; é uma ação deliberada e silenciosa.\n\nMinha Pergunta: Dado que o login é bem-sucedido, mas o redirecionamento está incorreto e não há erros nos logs, qual política interna do Discourse, verificação prévia ou configuração oculta poderia estar fazendo com que ele ignore o return_sso_url e redirecione para a página inicial em vez disso? Sinto que esgotei todas as configurações padrão.\n\nObrigado antecipadamente por quaisquer ideias!”,“target_locale”:“pt_BR”}