Inicio de sesión sin contraseña usando passkeys

Siguiendo Support passwordless login with Passkeys y tras unas semanas de pruebas internas, nos complace anunciar que la compatibilidad con las passkeys ya está disponible en Discourse.

¿Qué son las passkeys?

Las passkeys son una alternativa más segura y sencilla al uso de contraseñas para la autenticación. La creación y el uso de una passkey están ahora ampliamente soportados en plataformas y navegadores. En comparación con las contraseñas, las passkeys tienen una seguridad integrada mejorada gracias a credenciales sólidas generadas por la plataforma y a la validación biométrica de la identidad (como Touch ID, Face ID, PIN o contraseña del dispositivo). Las passkeys también son seguras frente a fugas de datos en el lado del servidor (la parte privada de la clave nunca sale del dispositivo) o el phishing (cada clave está vinculada a un solo sitio web/servicio).

Despliegue de la función

Si eres un cliente alojado, la compatibilidad con passkeys se desplegará en tu instancia en los próximos días. Si deseas habilitarlas de inmediato, ponte en contacto con @team aquí en meta o por correo electrónico a team@discourse.org.

Si alojas Discourse tú mismo, ten en cuenta que la función se habilitará por defecto en el núcleo de Discourse en breve ya está habilitada por defecto en el núcleo a partir de este commit. Si deseas deshabilitarla, puedes hacerlo a través de la consola de Rails:

launcher enter app
rails c
SiteSetting.enable_passkeys = false

Ten en cuenta que las passkeys solo se pueden usar en instancias de Discourse con inicios de sesión locales habilitados. Si tu instancia no utiliza inicios de sesión locales, la función de passkeys no tiene ningún efecto.


Una vez habilitada la función, los usuarios pueden añadir passkeys a su cuenta yendo a la pestaña de seguridad de sus preferencias de usuario:

Una vez registrada una passkey, pueden iniciar sesión con ella a través del menú desplegable de autocompletado debajo del campo del nombre de usuario (1) o haciendo clic en el botón “Iniciar sesión con una passkey” (2).

Más detalles

Hay numerosos recursos y guías disponibles sobre passkeys. He encontrado que los siguientes son los más útiles:

Posibles mejoras futuras

Una vez completada la implementación inicial de la función, podemos considerar la posibilidad de realizar las siguientes mejoras:

  • Permitir la configuración de una passkey al crear una cuenta.
  • Permitir el uso de passkeys al confirmar acciones sensibles (actualmente soportado en la pestaña Seguridad de las Preferencias del Usuario pero no en algunas pantallas solo para administradores).
  • Permitir la eliminación de contraseñas por completo (¿por usuario o por instancia?).
32 Me gusta

¡Esta es una gran adición! Sin embargo, los beneficios de seguridad se pueden eludir fácilmente iniciando sesión con una contraseña. Esperaba que todavía se me pidiera una clave de acceso después de ingresar mi contraseña, pero simplemente inicia sesión con la contraseña. Esto se puede evitar volviendo a registrar las claves de seguridad en la configuración separada de 2FA, pero eso no es obvio y es engorroso.

3 Me gusta

Gracias @Be0

En la mayoría de las implementaciones actuales, las claves de acceso aún no se están implementando de esta manera. Se tratan de forma independiente de la autenticación de dos factores (2FA), véase este informe sobre el enfoque de Youtube. Creo que la industria se adaptará lentamente a esto.

Se necesitan dos cambios para que esto funcione como esperas:

paso 1: permitir el uso de claves de acceso como 2FA (actualmente, como has señalado, las claves de seguridad deben registrarse de forma independiente)
paso 2: aplicar la 2FA en los inicios de sesión con contraseña cuando el usuario haya añadido una clave de acceso

El paso 1 tiene sentido para mí y no es disruptivo. El paso 2 también tiene sentido, pero es un poco disruptivo; si el usuario elimina la clave de acceso de su navegador (o no la tiene en un dispositivo determinado), se bloqueará el acceso.

Creo que tiene sentido investigar esto, sin embargo.

7 Me gusta

Hola, al navegar por mi sitio de Discourse en el móvil (Firefox), las passkeys no son compatibles, ¿es como se esperaba?

4 Me gusta

Creo que Firefox está trabajando activamente para añadir soporte para passkeys en general, pero todavía no está al 100% si estoy interpretando este gráfico correctamente.

Dependiendo de tu versión y sistema operativo, es posible que aún no esté disponible. Acabo de hacer una prueba rápida en macOS e iOS, y la autenticación con passkeys estuvo disponible y funcional para mí aquí en meta.discourse.org.

5 Me gusta

Se dividió una publicación a un nuevo tema: Problemas al usar passkeys con vaultwarden

Si la función de autocompletado del navegador no incluye la passkey por alguna razón, puedes hacer clic en el botón “Iniciar sesión con una passkey”.

3 Me gusta

Puedes escribir un mensaje privado a @team aquí o enviar un correo electrónico a team@discourse.org y podemos desactivar esta función para ti. No recomendamos hacerlo, muchos servicios en la web están adoptando passkeys como una opción más segura para la autenticación.

4 Me gusta

¿Está en los planes poder deshabilitar la contraseña por completo (preferiblemente según la configuración de la cuenta, ya que veo que obligar a sitios enteros a hacerlo no terminará bien)? Porque tener tanto una passkey como una contraseña activas limita un poco la utilidad de la passkey. Se puede mitigar un poco creando una contraseña absurdamente compleja y simplemente sin usarla, pero eso es solo eludir el propósito de las passkeys.

4 Me gusta

Sí, creo que sería bueno (y mejoraría la seguridad de la cuenta). Lo añadiré ahora en la sección “Posibles mejoras futuras” del OP.

3 Me gusta

Esto es crucial para la seguridad de las passkeys. Son poco más que una conveniencia si no puedo deshabilitar el inicio de sesión con contraseña.

2 Me gusta

Si entiendo correctamente el mecanismo de passkey, necesitas tener instalado un contenedor de confianza, como un gestor de contraseñas, para almacenar las claves de acceso. Eliminar las contraseñas asume que todos los usuarios han instalado dicho gestor, entonces, ¿cómo iniciarán sesión aquellos usuarios que no lo han hecho?

1 me gusta

De la misma manera que las personas que no usan 2FA acceden a sitios que requieren 2FA: no lo hacen.

Tampoco es una preocupación real, ya que Chrome, Safari, Windows, iPhones, Android, Yubi, etc., son alternativas a los administradores de contraseñas (que ya deberías estar usando en 2024 de todos modos) y todos funcionan con passkeys.

Tampoco estaba sugiriendo obligar a todos los usuarios a no tener contraseña (aunque estoy de acuerdo con eso), pero si TÚ, el usuario de passkey, no puedes deshabilitar tu contraseña, entonces la passkey tiene mucho menos propósito y sigues siendo completamente susceptible a phishing.

1 me gusta

Si eligiera las claves de acceso para Discourse, ya no usaría mi contraseña, así que ¿cómo puedo ser susceptible al phishing? Entiendo que el riesgo de ataque malicioso o de fuerza bruta al inicio de sesión con contraseña seguirá existiendo, y tu sugerencia de deshabilitarlo por usuario es válida, pero ¿no por phishing?

1 me gusta

¿Alguna novedad sobre la posible compatibilidad con la creación de cuentas solo con passkeys y sin contraseña? Parece casi inútil admitir passkeys cuando de todos modos se requiere una contraseña.

5 Me gusta

¿Es posible saber cuántas personas (si las hay) están utilizando esta función?

Sería bueno si se pudiera deshabilitar mediante una configuración normal del sitio.

1 me gusta

Puedes ver cuántos passkeys se han creado con este comando de Rails:

UserSecurityKey.where(factor_type: 1).count
1 me gusta

Gracias. Disculpa la pregunta básica, pero ¿es algo que se escribe después de lo siguiente?

launcher enter app
rails c
2 Me gusta

Para mi propia referencia, tanto como cualquier otra cosa, usé:

  • cd /var/discourse
  • ./launcher enter app (ya que sin el ./ decía “launcher: command not found”)
  • rails c (esperé un rato)
  • SiteSetting.enable_passkeys = false
  • Control-D para salir de la consola de Rails
  • Exit para salir de la aplicación

El resultado final fue que la opción de usar una passkey desapareció, como se esperaba. Gracias.

1 me gusta

Hubo una persona que había creado una passkey.

Obtuve el user_id con UserSecurityKey.where(factor_type: 1) y el nombre de usuario usando Data Explorer.

¿Hay algo que debamos hacer para asegurarnos de que nada se rompa al eliminar la opción de passkey?

¿Se cerrará la sesión del usuario, o simplemente ya no podrá iniciar sesión usando la passkey después de cerrar la sesión?

¿Tendrá el usuario ya una contraseña normal, o al menos ahora podrá generar una?

1 me gusta