Contornar SSO adicionando e-mail desconhecido ao grupo

Suponha que um site tenha o SSO ativado.

Ao adicionar usuários em massa a um grupo usando a interface descrita aqui, se um e-mail na lista de entrada não existir no Discourse, um e-mail de convite será enviado.

Se você clicar no link, será redirecionado para uma página de criação de conta dentro do Discourse:

Ao preencher o formulário, você cria uma conta. A conta criada não possui informações de SSO.

Acho que está bem claro por que isso é um problema:

  • Contornar nosso sistema de autenticação SSO é muito ruim.
  • Sem um aviso de que “X pessoas receberão e-mails”, acabei enviando spam para pessoas sem perceber que mensagens estavam sendo enviadas.

Comportamento esperado:

  • Ao adicionar usuários em massa a um grupo, se o SSO estiver ativado, ignore qualquer e-mail que ainda não esteja no site.
7 curtidas

Obrigado por relatar isso. Consegui reproduzir o problema no meu site de desenvolvimento. Quando o SSO está habilitado, quaisquer e-mails que ainda não estejam no site devem ser ignorados se forem adicionados a um grupo. Vamos corrigir isso. Desculpe pelo transtorno causado.

8 curtidas

Corrigido em PR #11950 e PR #11951. Obrigado pelo relato! :smiley:

7 curtidas

Este tópico foi fechado automaticamente 24 horas após a última resposta. Novas respostas não são mais permitidas.

@Grayden_Shand Na verdade, estamos atualmente considerando adicionar autenticação SSO na página de resgate de convites. Ao resgatar o convite, o usuário precisará se autenticar via SSO em vez de preencher o formulário de cadastro. Isso se encaixaria no seu caso de uso?

@sam Estou pensando no fluxo de convites e uma coisa de que não tenho certeza é se o e-mail para o qual o convite foi enviado precisa corresponder ao e-mail do SSO? Parece que poderíamos impor isso para convites baseados em e-mail, mas não para convites baseados em links. O que você acha?

3 curtidas

Sim, precisamos impor isso, especialmente para sites que exigem aprovação de conta.

Então, você pode habilitar a autenticação via Facebook, desabilitar a autenticação local e ainda assim cadastrar usuários.

No entanto, os links de convite (obviamente) têm uma exceção aqui, pois não estão associados a um e-mail.

1 curtida

Para o nosso caso de uso, seria muito melhor poder suprimir totalmente os e-mails de convite. Para a maioria dos nossos sites (comunidades temporárias para cursos online), há uma janela limitada para cadastro (e uma taxa). Então, imagino que alguém que receba um convite para o site e, ao aparecer, veja que não pode mais se juntar, ficaria frustrado. Realmente não há nenhuma circunstância em que queiramos que alguém receba um convite para um de nossos sites.

Se você prosseguir com isso, peço que também implemente um aviso com algo como: “Você está prestes a enviar e-mails para XX pessoas que não são usuárias do seu site: bob@example.com, alice@example.com, …” Assim, poderíamos encontrar esses usuários e removê-los da lista de adição em massa.

Você conseguiria usar links de convite para o seu caso de uso? Assim, ninguém receberia e-mails e você teria uma data de validade.

Ainda ofereço um modo ninja para contornar o envio de e-mails, permitindo que você adicione um grande número de endereços a uma lista de permissões, mas tenho curiosidade se o recurso de links de convite elimina a necessidade disso no seu caso.

1 curtida

Acho que não, mas talvez eu não esteja entendendo a pergunta corretamente. Deixe-me explicar como usamos o Discourse, o recurso de SSO e por que esbarrei nesse bug inicialmente.

Executamos uma plataforma de e-learning que usa um fórum Discourse temporário para cada sessão de cada workshop (curso).

Usamos SSO com um sistema de autenticação personalizado por dois motivos:

  1. para que o usuário precise criar apenas um conjunto de credenciais para acessar qualquer curso em que esteja inscrito.
  2. para aplicar políticas sobre quem tem permissão para entrar em cada fórum Discourse com base em dados arbitrários do nosso banco de dados. Por exemplo, no nosso endpoint de SSO do Discourse, verificamos se o usuário tem uma inscrição válida e se a data está dentro dos limites das datas de abertura e fechamento.

Encontrei esse bug acima quando quis criar um grupo em um workshop apenas para pessoas que estavam em outro (como um grupo de ex-alunos). Então, adicionei a lista completa de alunos do outro workshop ao modal de adição em massa e, sem querer, enviei convites para todos na lista que não estavam inscritos no workshop atual.

Portanto, realmente nunca usaríamos o recurso de convites no Discourse (seja por link ou por e-mail). Se quiséssemos um recurso de convite, provavelmente teríamos que construí-lo nós mesmos, pois haveria alguma lógica de negócios que gostaríamos de aplicar sobre os convites enviados. Por exemplo, se o período de inscrição no workshop estivesse encerrado, gostaríamos de exibir uma mensagem de erro no link. Ou talvez quiséssemos incluir um desconto no link.

Tudo isso para dizer que funciona se não precisarmos usá-lo, mas realmente gostaríamos de não ter que nos preocupar em enviar e-mails inadvertidamente para pessoas sem conta naquele Discourse.

3 curtidas