NeoCMS - Autenticación 2FA para panel de administración
No sé por qué dejé casi para el final o, mejor dicho, teniendo el CMS productivo, el segundo factor de autenticación.
Es por ésto que empecé a cranear como poder meterle via un autenticador, el segundo factor de autenticación al blog para darle una capa extra de seguridad en lo que respecta al logueo del administrador para evitar posibles ataques a la web (aunque quién va a querer atacar a un blog no? Pero bueno, por las dudas).
Asi que paso a contar lo que hice:
Para no reinventar la rueda de la criptografía, utilicé dos librerías fundamentales de Python:
-
pyotp: Para generar la semilla (el secreto) y validar los códigos temporales (TOTP).
-
qrcode: Para generar el código de barras bidimensional que escaneamos con el celular.
La Lógica detrás del Login
El flujo de autenticación ahora se divide en dos etapas:
-
Pre-Autenticación: El usuario ingresa su contraseña. Si es correcta, no entra al panel, sino que se le asigna una variable de sesión llamada pre_auth y se lo redirige a la pantalla del 2FA.
-
Verificación TOTP: Aquí el sistema evalúa si es la primera vez que este administrador entra, o si ya tiene el 2FA configurado.
El Código Backend
Aquí está la magia de la ruta. Lo más interesante es el manejo de la "Primera Vez". Si el sistema no detecta el archivo donde guardamos el secreto (TOTP_FILE), genera una semilla temporal, crea una URI de aprovisionamiento, y la convierte en un código QR codificado en Base64 para mandarlo directo al HTML sin guardar imágenes en el disco duro.
El Frontend
Para la interfaz, armé un diseño minimalista en modo oscuro. Usando el motor de plantillas Jinja2, el HTML decide qué mostrar:
Si la variable first_time es verdadera, despliega las instrucciones y la etiqueta "img" con el código QR inyectado directamente en Base64.
Si es falso, simplemente pide el código de 6 dígitos.
Implementar 2FA desde cero parece intimidante, pero con las librerías adecuadas, requiere apenas unas pocas líneas de código. Ahora NeoCMS cuenta con un nivel de seguridad profesional, asegurando que el contenido y la administración del sitio estén protegidos, incluso si una contraseña llegara a filtrarse.
Ya podés ver los cambios implementados en el Repositorio de Github de NeoCMS bajo la versión v0.5 para dejar un CMS completo sin depender de ningún servicio de terceros.
Nos leemos en el Fediverso
Comentarios
Deja un comentario