bolt Valebyte VPS desde $4/mes — NVMe, despliegue en 60s.

Obtener VPS arrow_forward

Autenticación autoalojada para apps Python: Bottle-Cork y hardening del servidor

calendar_month 17 de julio de 2026 schedule 6 min de lectura visibility 20 vistas
person
Valebyte Team
summarize

TL;DR

  • Bottle-Cork da a las pequeñas apps Python autoalojadas cuentas de usuario, roles con nivel entero, cookies de sesión firmadas y flujos de registro/restablecimiento. Pon la autorización en la ruta, guarda en secreto la clave de firma y refuerza el host (firewall default-deny, fail2ban, TLS, proxy inverso) en un servidor que controles de verdad.

Bottle-Cork es una biblioteca ligera de autenticación y autorización para aplicaciones web en Python construidas sobre el microframework Bottle. Le da a una pequeña aplicación autoalojada lo que de otro modo reimplementarías mal: cuentas de usuario, permisos por roles, cookies de sesión firmadas, registro y restablecimiento de contraseña. Esta guía explica cómo funciona Cork, cómo se compara con otras opciones de Python y cómo ejecutar de forma segura una app con autenticación en tu propio servidor.

Qué hace Bottle-Cork de un vistazo

CapacidadCómo lo resuelve Cork
Cuentas de usuarioUsuario, contraseña con hash, correo, rol y datos de perfil arbitrarios
AutorizaciónRoles con nivel entero; los decoradores exigen un nivel mínimo
SesionesCookies firmadas y con caducidad vía Beaker; sin almacén de sesión en servidor
RegistroFlujo de registro pendiente con token de confirmación por correo
Restablecer contraseñaToken firmado y con tiempo limitado enviado por correo
Backend de almacenamientoArchivos JSON, MongoDB o SQLAlchemy

Cómo funciona Cork

Cork se sitúa entre el enrutado de Bottle y tus manejadores. Cada petición protegida llama a un método de Cork que revisa la cookie de sesión, resuelve al usuario actual y permite ejecutar el manejador o aborta con una redirección al login. Usuarios, roles y registros pendientes viven en un backend que eliges al arrancar. Para una sola app pequeña basta con JSON; para escrituras concurrentes pasa a MongoDB o SQLAlchemy.

Los roles se ordenan por un nivel entero. Un admin de nivel 100 puede todo lo que puede un editor de nivel 50, y más. Los manejadores declaran el nivel mínimo requerido, así la autorización se expresa una vez, en la ruta, y no dispersa por la lógica de negocio.

Una app mínima con autenticación

from bottle import Bottle, request, redirect
from cork import Cork
from beaker.middleware import SessionMiddleware

aaa = Cork('conf_dir') # backend: users.json, roles.json, ...
app = Bottle()

@app.post('/login')
def login():
 aaa.login(request.forms.get('user'),
 request.forms.get('pwd'),
 success_redirect='/dashboard',
 fail_redirect='/login')

@app.route('/dashboard')
def dashboard():
 aaa.require(fail_redirect='/login')
 return 'Hello %s' % aaa.current_user.username

@app.route('/admin')
def admin():
 aaa.require(role='admin', fail_redirect='/login')
 return 'Admin area'

wrapped = SessionMiddleware(app, {'session.type': 'cookie',
 'session.encrypt_key': 'CHANGE-ME',
 'session.validate_key': True})

Dos ideas que llevarte aunque nunca uses Cork: la autorización va en la ruta con una sola llamada a require(), y la integridad de la sesión depende por completo de una clave secreta de firma que debe ser larga, aleatoria y estar fuera del árbol de código.

rocket_launch Elección rápida

¿Buscas un servidor que simplemente funcione?

Valebyte VPS — NVMe, soporte 24/7, despliegue en 60 segundos.

Ver planes VPS arrow_forward

Roles y autorización

Mantén pocos roles y con saltos de nivel amplios (por ejemplo 0 = privado, 30 = usuario, 60 = editor, 100 = admin). Los saltos amplios permiten insertar un nivel nuevo sin renumerar a todos. Nunca concedas poder por el nombre de usuario; comprueba el nivel del rol. Los nombres cambian, se suplantan en los tickets de soporte y se filtran en los logs.

Seguridad de contraseñas y sesiones

Cork guarda hashes de contraseñas, no contraseñas, y firma sus cookies de sesión. Eso es la base, no la meta. Exige una longitud mínima real de contraseña, limita la tasa del login contra el credential stuffing, caduca las sesiones con un tiempo sensato y rota la clave de firma si se expone. Sirve todo por HTTPS para que la cookie no se lea en la red y márcala como Secure y HttpOnly.

Bottle-Cork frente a otras opciones de Python

OpciónFrameworkMejor paraCompromiso
Bottle-CorkBottle / WSGIApps autoalojadas pequeñas con roles sin base de datosEcosistema mínimo; el correo y el rate-limit los cableas tú
Flask-LoginFlaskGestión de sesiones en apps FlaskSolo sesiones; roles y registro corren de tu cuenta
AuthlibCualquieraProveedores y clientes OAuth2 / OpenID ConnectMás pesado; excesivo para una sola app interna
Django authDjangoApps completas que ya usan el ORM de DjangoAdoptas todo el framework
Authelia / KeycloakSSO independienteProteger varios servicios tras un único loginUn servicio aparte que hay que asegurar

Si ya ejecutas más de un par de servicios autoalojados, un proveedor de identidad independiente como Keycloak suele ser mejor a largo plazo — consulta nuestra guía para instalar Keycloak para SSO e IAM. Para una sola app Bottle, Cork no estorba.

rocket_launch Elección rápida

¿Buscas un servidor que simplemente funcione?

Valebyte VPS — NVMe, soporte 24/7, despliegue en 60 segundos.

Ver planes VPS arrow_forward

Hardening del servidor detrás de tu login

La autenticación no es más fuerte que la máquina donde corre. Un login perfecto no sirve si el puerto de la base de datos está abierto a internet o un panel viejo responde en el 8080. Trata al host como parte del límite de autenticación:

  • Firewall con default-deny. Expón solo el 443 (y SSH por clave, idealmente en una configuración no estándar). Herramientas en la tradición de Firelet, y hoy nftables o ufw, permiten describir el tráfico permitido de forma explícita y auditarlo como un conjunto de reglas.
  • Fail2ban en los logs de login y SSH para banear fuentes de fuerza bruta.
  • TLS en todo con renovación automática de certificados; redirige todo el HTTP a HTTPS.
  • Un proxy inverso (nginx o Caddy) delante del proceso Python, para que la app no mire a internet directamente.
  • Mínimo privilegio: ejecuta la app como usuario sin root y deja el archivo del backend legible solo por ese usuario.

Los primeros treinta minutos en una máquina nueva marcan el resto — nuestra lista para asegurar un servidor dedicado justo tras la entrega cubre firewall, SSH y actualizaciones en orden.

Qué servidor elegir para autoalojar tu app

En cuanto entran usuarios reales quieres CPU y memoria predecibles, una IP fija y control total del firewall — nada de eso lo da del todo el hosting compartido. Un servidor virtual privado sirve para una app ligera; un servidor dedicado es la opción correcta cuando guardas datos reales, ejecutas una base de datos o necesitas recursos garantizados sin vecinos ruidosos. Si el límite es el coste, un servidor dedicado económico igual te da el aislamiento y el control del firewall de los que depende la autenticación.

Bottle-Cork es pequeño, y esa es la clave: lo que importa no es la biblioteca, sino la disciplina alrededor — credenciales con hash, autorización por roles, sesiones firmadas y un host reforzado debajo. Hazlo bien y hasta una app Bottle de cien líneas es segura en internet abierto.

Compartir esta publicación:

support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.