Login automático ativado para a comunidade pública?

Notei algumas postagens sobre isso, com a maioria delas dizendo que é um recurso disponível apenas para comunidades fechadas Auto-sign-in with the OpenId Connect Plugin and AWS Cognito - support - Discourse Meta

How to auto-login user in application web view - dev / sso - Discourse Meta

Esperamos ter uma comunidade onde você só obtenha uma conta como parte do nosso processo de registro de produto, mas queremos tornar o conteúdo do fórum visível para que, se as pessoas estiverem tentando se autoajudar via Google, elas possam obter um resultado apropriado enquanto estão não autenticadas. (também para que possamos atingir algumas metas de SEO para nosso conteúdo)

Isso é possível ou é um sonho? Parece que não sou a primeira pessoa a fazer essa pergunta, ou a desejar essa capacidade de produto.

editar: Em particular, estou falando sobre este aspecto específico da especificação OIDC - Auto-sign-in with the OpenId Connect Plugin and AWS Cognito - #8 by david

Então o problema é que alguns usuários estarão logados no seu Cognito e você não quer que eles recebam uma caixa de diálogo de login se tentarem responder? Pensei que com o Discourse Connect esse era o comportamento padrão.
Você pode tornar o site aberto para usuários anônimos e Google.

2 curtidas

Em um mundo ideal, um usuário que visualiza o Discourse e tem uma conta deve estar logado o tempo todo, desta forma podemos capturar todos os dados de visualização dele. Farei com que, se um usuário do produto clicar em um link no produto para visualizar a comunidade, ele será autenticado, bem como quaisquer links que o usuário só deveria ver se estivesse autenticado em outro lugar (página da conta, por exemplo).

No entanto, se um usuário tentar autoatendimento via Google e acabar na comunidade, não podemos capturar esses dados até que ele tente interagir diretamente com a comunidade, mesmo que ele esteja autenticado em outro lugar em nosso sistema. Parece que a única maneira de resolver isso é com a configuração do site login_required ativada, que, se eu entendi corretamente, efetivamente torna o site privado.

Obrigado. Eu não sabia disso. Sou um CM tentando entender todos os detalhes de três produtos separados e isso está fritando meu cérebro tentando entender os detalhes de cada um! Espere ver mais alguns posts meus tentando resolver tudo, e agradeço a sua paciência.

2 curtidas

No caso geral, isso será impossível (como você pode dizer se um usuário anônimo tem uma conta sem pedir para ele fazer login?). No entanto, deve ser possível detectar se um usuário já tem uma sessão ativa em seu site SSO.

Esse tópico é bem antigo, mas acho que o princípio ainda deve se aplicar. Basicamente, adicione uma URL com suporte CORS apropriado que retorne uma resposta JSON indicando se o usuário tem uma sessão ativa. Em seguida, adicione algum JS ao seu tema do Discourse que consulte essa URL e acione o processo SSO se uma sessão ativa existir.

2 curtidas

Receio que a resposta geral ainda seja em grande parte a mesma da última vez

A especificação sobre a qual eu estava falando é OpenID Connect Session Management. Infelizmente, essa solução baseada em iframe está se tornando cada vez menos útil porque muitos navegadores agora bloqueiam cookies de terceiros por padrão. Agora, ela só funciona de forma confiável se seu provedor de identidade e o Discourse tiverem a mesma ‘origem’.

Como o @simonk disse, dependendo do seu provedor de identidade, pode ser possível implementar algo personalizado por meio de um componente de tema, mas não estou ciente de nenhuma solução geral que possamos adicionar ao próprio Discourse.

3 curtidas

Mas acho que estou errado.

Você está absolutamente certo que clicar em ‘responder’ acionará o fluxo de login. E se o DiscourseConnect (ou qualquer outro provedor de login único) estiver sendo usado, o modal de login do Discourse será ignorado :+1:

No entanto, acho que o OP quer que as pessoas façam login automaticamente, sem que precisem clicar em ‘responder’ ou ‘login’. Com esse tipo de configuração, seria totalmente transparente para os usuários se moverem entre o site principal e a comunidade. Conseguimos isso para alguns clientes, mas foram implementações personalizadas que não podem ser facilmente generalizadas.

Para dar um exemplo de uma abordagem: se o seu fórum estiver em forum.example.com e o seu site principal estiver em example.com, o fórum poderá ler cookies de example.com. Assim, um componente de tema pode verificar a existência de um cookie e fazer algo como isto:

const cookie = require("discourse/lib/cookie").default;
if(cookie('name_of_example_com_auth_cookie') && !api.getCurrentUser()){
  // O usuário tem um cookie de autenticação para example.com. Eles estão quase certamente
  // logados lá, então vamos executar o fluxo de autenticação
  window.location = "https://forum.example.com/auth/oidc"
}

(várias condições se aplicam aqui. por exemplo, o cookie não deve ser http_only, não deve ser um cookie apenas de host, etc.)

5 curtidas

Esse é realmente o caso. É bom saber que é possível, mas personalizado.

Além disso, como eu não sabia que um usuário que clica em responder pularia a caixa de diálogo de login dependendo da implementação, isso aliviará muitas das minhas preocupações em primeiro lugar. Essa é a principal barreira de entrada que quero evitar, e fico feliz que possa ser implementada.

Claro, o nerd de dados em mim quer a versão ideal, e é possível que possamos aspirar a isso. Saber que é possível por enquanto é bom o suficiente. Obrigado mais uma vez a todos pelo tempo de vocês.

2 curtidas

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.