ID do Discourse e 2FA

@JammyDodger, recentemente criei uma conta para uma instância gratuita:

Lá, parece que estou enfrentando o mesmo problema descrito em t/227972:

A maior parte da documentação indica que isso deveria estar ativado por padrão:

No entanto, não tenho nenhuma opção para ativá-lo, e ele não está ativado por padrão:

Movi sua postagem para cá, pois se trata de um problema diferente do que você postou originalmente em Contribute > Bug.

O Discourse ID não está usando OAuth2. Ele funciona, na prática, como um provedor de SSO, o que é diferente.

Para configurar a autenticação de dois fatores (2FA), você precisará fazê-lo no provedor de SSO, ID. Especificamente em https://id.discourse.com/my/preferences/security.

@jomaxro, obrigado. Talvez o que me confundiu foi que tentei definir enforce_second_factor como “all”, mas não consegui, pois fui informado de que “Você não pode exigir 2FA se logins locais estiverem desativados.” Se não for muito fora do tópico, qual é a solução para isso?

Essa é uma boa pergunta… e uma para a qual não tenho a resposta. Enviei para a equipe para encontrar alguém que tenha!

Então, fui corrigido pela equipe. O Discourse ID realmente usa OAuth2 por trás dos panos — peço desculpas. Achei que ele estivesse usando um protocolo diferente.


Sobre sua pergunta, não suportamos 2FA com logins externos. Como a mensagem que você viu indicou, o 2FA não pode ser imposto sem que os logins locais estejam habilitados. Nós dependemos do provedor de login externo (Discourse ID, neste caso, mas isso se aplica a todos os provedores externos) para gerenciar o 2FA, incluindo sua imposição.

@jomaxro, isso significa que, com o plano gratuito de teste, não posso modificar essa preferência? Alternativamente, consigo desconectar de alguma forma o Discourse ID?

Quer confirmar: você está se referindo a um teste gratuito ou ao plano gratuito?

@jomaxro, desculpe. Plano gratuito, creio eu:

Pergunta para nós: O IdP transmite ao SP a informação de se o usuário realizou ou não a MFA?

Estou pensando em um mecanismo análogo ao U2F / FIDO — o programa pode solicitar uma atestação do dispositivo sobre o nível de interação do usuário esperado ou necessário para a credencial.

Se o Discourse ID… ou, de forma semelhante, qualquer outro IdP (SAML? oAuth2? OIDC?) transmitir essa informação ao SP, seria uma informação que poderíamos potencialmente utilizar.

Caso contrário, ficamos meio presos na necessidade de implementar a MFA após o login federado para obter essa garantia.

A maneira padrão de fazer isso é via OIDC. O Discourse ID atualmente é construído apenas com OAuth2. Para suportar um indicador de MFA, precisaríamos implementar OIDC na camada do provedor e passar os valores de MFA para frente e para trás para os clientes que os exigirem.

Existem várias complicações:

  • no núcleo do Discourse, temos a opção de exigir 2FA apenas para certos tipos de usuário (funcionários ou todos); provavelmente precisamos de algo similar para ser suportado via ID
  • o ID permite logins via Google/Apple/Facebook/Github, mas eles não indicam de forma confiável se o usuário completou o 2FA ao fazer login… podemos precisar implementar o 2FA na camada do ID e também provavelmente exigir 2FA duplo para alguns usuários, o que não é ideal
  • o 2FA na camada do provedor de identidade (ou seja, não na instância local) é suficiente para todos os consumidores? De modo geral, acho que sim, mas precisaríamos fazer um pouco mais de pesquisa antes de nos comprometermos com isso