Seguindo o link Support passwordless login with Passkeys e algumas semanas de testes internos, temos o prazer de anunciar que o suporte para passkeys chegou ao Discourse.
O que são passkeys
Passkeys são uma alternativa mais segura e simples ao uso de senhas para autenticação. A criação e o uso de uma passkey agora são amplamente suportados em plataformas e navegadores. Em comparação com senhas, as passkeys têm segurança integrada aprimorada devido a credenciais fortes geradas pela plataforma e validação biométrica de identidade (como Touch ID, Face ID, PIN ou senha do dispositivo). As passkeys também são seguras contra vazamentos do lado do servidor (a parte privada da chave nunca sai do dispositivo) ou phishing (cada chave está vinculada a apenas um site/serviço).
Lançamento do Recurso
Se você é um cliente hospedado, o suporte a passkeys será implementado em sua instância nos próximos dias. Se desejar ativá-los agora, entre em contato com @team aqui no meta ou por e-mail para team@discourse.org.
Se você auto-hospeda o Discourse, observe que o recurso será habilitado por padrão no core do Discourse em breve está agora habilitado por padrão no core a partir de este commit. Se desejar desativá-lo, você pode fazê-lo através do console Rails:
launcher enter app
rails c
SiteSetting.enable_passkeys = false
Observe que as passkeys só podem ser usadas em instâncias do Discourse com logins locais habilitados. Se sua instância não usa logins locais, o recurso de passkeys não tem efeito.
Uma vez que o recurso esteja habilitado, os usuários podem adicionar passkeys à sua conta acessando a aba de segurança de suas preferências de usuário:
Depois que uma passkey for registrada, eles poderão fazer login com ela através do menu suspenso de preenchimento automático sob o campo de nome de usuário (1) ou clicando no botão “Login com uma passkey” (2).
Após a conclusão do lançamento inicial do recurso, podemos considerar fazer as seguintes melhorias:
Permitir a configuração de uma passkey na criação da conta
Permitir que as passkeys sejam usadas ao confirmar ações sensíveis (atualmente suportado na aba Segurança das Preferências do Usuário, mas não em algumas telas exclusivas para administradores)
Permitir a remoção de senhas completamente (por usuário ou por instância?)
Esta é uma ótima adição! No entanto, os benefícios de segurança podem ser facilmente contornados fazendo login com uma senha. Eu esperava ainda ser solicitado a usar uma chave de acesso após inserir minha senha, mas ele simplesmente faz o login com a senha. Isso pode ser evitado registrando novamente as chaves de segurança nas configurações separadas de 2FA, mas isso não é óbvio e é complicado.
Na maioria das implementações atuais, as chaves de acesso ainda não estão sendo implantadas dessa forma. Elas estão sendo tratadas como independentes da autenticação de dois fatores (2FA), veja este relatório sobre a abordagem do Youtube. Acho que a indústria se adaptará lentamente a isso.
São necessárias duas alterações para que isso funcione como você espera:
etapa 1: permitir o uso de chaves de acesso como 2FA (atualmente, como você observou, as chaves de segurança precisam ser registradas independentemente)
etapa 2: impor 2FA em logins de senha quando o usuário adicionou uma chave de acesso
A etapa 1 faz sentido para mim e não é disruptiva. A etapa 2 também faz sentido, mas é um pouco disruptiva; se o usuário excluir a chave de acesso do navegador (ou não a tiver em um determinado dispositivo), o acesso será bloqueado.
Acho que o Firefox está trabalhando ativamente para adicionar suporte a passkeys em geral, mas ainda não está 100% implementado se eu estiver interpretando este gráfico corretamente.
Dependendo da sua versão e sistema operacional, ele pode ainda não estar disponível. Fiz um teste rápido no macOS e iOS, e a autenticação por passkey estava disponível e funcional para mim aqui no meta.discourse.org.
Se a função de preenchimento automático do navegador não incluir a chave de acesso por algum motivo, você pode clicar no botão "Entrar com uma chave de acesso".
Você pode escrever uma mensagem privada para @team aqui ou enviar um e-mail para team@discourse.org e podemos desativar esse recurso para você. Não recomendamos fazer isso, muitos serviços na web estão adotando senhas como uma opção mais segura para autenticação.
Há planos para eventualmente desativar completamente a senha (preferencialmente com base nas configurações da conta, pois vejo que forçar sites inteiros a fazer isso não acabará bem)? Porque ter tanto uma chave de acesso quanto uma senha ativas meio que limita a utilidade da chave de acesso. Você pode mitigar isso criando uma senha absurdamente complexa e nunca a usando, mas isso apenas contorna o propósito das chaves de acesso.
Se entendi o mecanismo de chave de acesso corretamente, você precisa ter um contêiner confiável instalado, como um gerenciador de senhas, para armazenar as chaves de acesso. Eliminar senhas pressupõe que todos os usuários instalaram tal gerenciador, então como aqueles usuários que não o fizeram farão login?
Da mesma forma que pessoas que não usam 2FA acessam sites que exigem 2FA - elas não acessam.
Não que isso seja uma preocupação real, já que Chrome, Safari, Windows, iPhones, Android, Yubi, etc., são alternativas aos gerenciadores de senhas (que você já deveria estar usando em 2024, independentemente) e todos funcionam com chaves de acesso.
Eu também não estava sugerindo forçar todos os usuários a não terem senha (embora eu esteja de acordo com isso), mas se VOCÊ, o usuário da chave de acesso, não consegue desativar sua senha, a chave de acesso serve a um propósito muito menor e você ainda é completamente passível de phishing.
Se eu escolhesse chaves de acesso para o Discourse, não usaria mais minha senha, então como posso ser suscetível a phishing? Entendo que o risco de ataque malicioso ou de força bruta no login com senha permanecerá, e sua sugestão de desativá-lo por usuário é válida, mas não por phishing?
Alguma atualização sobre o possível suporte à criação de contas apenas com passkeys e sem senha? Parece quase inútil oferecer suporte a passkeys quando você já é obrigado a ter uma senha.