Desacoplar login/cadastro por e-mail sem senha da ativação de logins locais

Gostaria de solicitar suporte para um fluxo local verdadeiramente sem senha no Discourse, sem depender de um provedor de identidade externo, como Microsoft, Google, etc.

No momento, pelo que pude perceber, o Discourse já possui partes disso, mas não a combinação de configuração necessária.

O que existe hoje

O Discourse já possui:

  • contas locais
  • links de login por e-mail / comportamento de login sem senha via enable local logins via email
  • fluxos de convite onde a senha pode ser adiada
  • provisionamento automático de autenticação externa via OIDC / OAuth / SAML / DiscourseConnect

Mas a peça que falta é que o login local baseado em e-mail ainda está vinculado aos logins locais em geral, o que significa que não posso dizer claramente:

  • permitir login local com link mágico por e-mail
  • permitir cadastro/onboarding local com link mágico por e-mail
  • não permitir autenticação local por senha

Essa é a combinação que desejo.

O caso de uso

Quero que o Discourse suporte nativamente este modelo:

  1. O usuário chega ao site
  2. O usuário insere o e-mail
  3. O Discourse envia um link de login de uso único/curta duração por e-mail
  4. Se ele ainda não tiver uma conta, o Discourse cria uma
  5. O usuário faz login
  6. Logins futuros podem continuar da mesma forma
  7. Nenhuma senha local é necessária, a menos que o administrador queira explicitamente permitir uma

Em outras palavras:

conta local
verificação de propriedade do e-mail local
nenhuma senha local necessária

Por que isso importa

No momento, se alguém deseja uma experiência sem senha, a solução alternativa mais limpa parece ser usar um provedor de identidade externo. Mas isso não é ideal para todos os sites.

Algumas razões:

  • nem toda comunidade quer depender de Microsoft / Google / Auth0 / etc
  • algumas comunidades desejam um fluxo de autenticação local mais simples e que preserve mais a privacidade
  • algumas comunidades querem reduzir o atrito das senhas sem terceirizar a identidade
  • alguns administradores querem dar suporte a usuários que têm dificuldade com senhas, mas conseguem lidar bem com links de e-mail

Já existe precedente para login sem senha no Discourse por meio de links por e-mail, então isso parece mais um modo de produto ausente do que um conceito completamente novo.

O que estou pedindo

Acho que isso poderia ser resolvido desacoplando esses conceitos:

Comportamento atual

  • enable local logins
  • enable local logins via email

Comportamento solicitado

Permitir que os administradores controlem independentemente:

  • permitir login local por senha
  • permitir login local por link de e-mail
  • permitir cadastro local por senha
  • permitir cadastro/criação de conta local por link de e-mail

Modelo de configurações desejado (exemplo)

Algo como:

  • enable local password logins
  • enable local email logins
  • enable local password signup
  • enable local email signup
  • talvez local email signup creates account automatically
  • talvez local email signup requires staff approval
  • talvez local email login link expiry minutes

Não necessariamente esses nomes exatos de configuração, apenas o conceito.

UX desejada

Login

O usuário deve poder escolher:

  • continuar com senha
  • ou envie-me um link de login por e-mail

Se o login por senha estiver desabilitado, apenas a opção de link por e-mail será exibida.

Cadastro

O usuário deve poder escolher:

  • criar conta com senha
  • ou criar conta via link de e-mail

Se o cadastro por senha estiver desabilitado, o site deve simplesmente fazer o cadastro por link de e-mail.

Por que convites não são suficientes

Convites ajudam no onboarding, mas não são a mesma coisa que um modo real de autenticação local sem senha.

Pelo que entendi:

  • convites são principalmente para aceitação/resgate
  • eles não são a credencial de login contínua do usuário
  • após o término da sessão, os usuários ainda precisam de um caminho normal de login

Portanto, convites estão relacionados, mas não resolvem totalmente o problema.

Por que autenticação externa não é suficiente

Sim, OIDC / OAuth / SAML podem proporcionar experiências sem senha ou baseadas em OTP, e auth skip create confirm ajuda muito nisso.

Mas isso significa que o site agora depende de um provedor de identidade de terceiros.

Para algumas comunidades, isso é aceitável. Para outras, é uma complexidade desnecessária e uma dependência indesejada.

Reflexões sobre segurança

Percebo que a autenticação por link de e-mail tem implicações de segurança, mas o Discourse já possui padrões relacionados, como:

  • redefinição de senha por e-mail
  • login por link de e-mail
  • aceitação de convite por e-mail

Portanto, isso não estaria introduzindo a ideia de prova de controle baseada em e-mail do zero.

Medidas de proteção razoáveis poderiam incluir:

  • links de curta duração
  • limites de taxa agressivos
  • tokens de uso único
  • 2FA opcional após login por link mágico
  • período de espera opcional antes de alterar e-mail/senha após autenticação por link mágico
  • visibilidade/logs de administrador para logins por link mágico

Em resumo

Estou pedindo um modo local sem senha de primeira classe no Discourse, onde:

  • os usuários se autenticam provando o controle de seu e-mail
  • o Discourse pode criar contas locais a partir desse fluxo
  • os administradores podem desabilitar totalmente a autenticação local por senha
  • isso funciona sem precisar de Microsoft / Google / outro provedor de SSO

Acho que isso seria um recurso muito útil para comunidades que desejam onboarding de baixo atrito sem terceirizar a identidade.

1 curtida

Essa parte já é possível. E funciona bem.

1 curtida

Como é possível ajustar a página de cadastro para deixar claro que o campo de senha não precisa ser preenchido, além de remover os campos de e-mail e senha de /login via CSS?

diga a eles para usarem um gerenciador de senhas.

1 curtida

Recomendo o 1Password; ele também salvará as PassKeys.