Gestión de Contraseñas
Configura el hash de contraseñas con PBKDF2-SHA256, restablecimientos desde la CLI o la API de administración, flujos de autoservicio con token y almacenamiento de credenciales en SQLite o PostgreSQL en Potato.
Novedad en la v2.4.0
El sistema de autenticación de Potato usa PBKDF2-SHA256 con 100.000 iteraciones y una sal distinta por usuario, el mismo enfoque que recomienda el NIST para almacenar contraseñas de forma segura. Esta página explica cómo se guardan las contraseñas, cómo restablecerlas y cómo conservar las credenciales entre reinicios del servidor.
Implementación de Seguridad
Las contraseñas se guardan en formato salt$hash:
- Sal hexadecimal de 32 caracteres, única para cada usuario
- Hash SHA-256 de 64 caracteres de
salt + password - Comparación en tiempo constante mediante
hmac.compare_digestpara evitar ataques de temporización
Las contraseñas en texto plano que ya existan en archivos user_config.jsonl se vuelven a hashear automáticamente con sales únicas cuando Potato las carga; no hace falta ninguna migración manual.
Configuración Predeterminada
De forma predeterminada, Potato usa autenticación en memoria. Los anotadores deben aparecer en la configuración:
authentication:
method: in_memory
require_password: true
user_config:
users:
- username: "annotator1"
password: "initial-password" # will be hashed on first load
- username: "annotator2"
password: "initial-password"Credenciales Persistentes
Las credenciales en memoria se pierden al reiniciar. Para almacenarlas de forma persistente, usa un backend de archivo o de base de datos.
Persistencia en Archivo
authentication:
method: in_memory
user_config_path: /shared/path/to/user_config.jsonlPotato escribe las credenciales hasheadas en este archivo y las vuelve a leer al reiniciar, de modo que las contraseñas creadas o cambiadas durante una sesión sobreviven a los reinicios.
Backend de Base de Datos
SQLite (sin dependencias adicionales):
authentication:
method: database
database_url: "sqlite:///auth/users.db"PostgreSQL (requiere psycopg2-binary):
authentication:
method: database
database_url: "postgresql://user:password@localhost:5432/potato_auth"Las tablas de la base de datos se crean automáticamente en el primer arranque.
Nota: method: database y user_config_path son mutuamente excluyentes; elige una sola estrategia de persistencia.
Restablecer Contraseñas
CLI de Administración
Restablece una contraseña desde la línea de comandos:
# Reset a specific user's password
potato reset-password config.yaml --username annotator1
# Prompted for new password interactivelyAPI de Administración
Restablece la contraseña mediante programación con una clave de API:
curl -X POST http://localhost:8000/admin/reset_password \
-H "X-API-Key: $ADMIN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"username": "annotator1", "new_password": "new-secure-password"}'Restablecimiento de Autoservicio con Token
Potato admite un flujo de restablecimiento iniciado por el usuario. Los usuarios entran en /forgot-password, escriben su nombre de usuario y reciben un token de restablecimiento de un solo uso. Luego visitan /reset/<token> para definir una contraseña nueva.
Los tokens son válidos durante 24 horas y solo pueden usarse una vez. Potato no envía correos: la persona administradora distribuye el enlace de restablecimiento a mano.
Activarlo en la configuración:
authentication:
method: database
database_url: "sqlite:///auth/users.db"
allow_password_reset: true
reset_token_ttl_hours: 24Flujo de trabajo del administrador:
# Generate a reset token for a user
curl -X POST http://localhost:8000/admin/generate_reset_token \
-H "X-API-Key: $ADMIN_API_KEY" \
-d '{"username": "annotator1"}'
# Returns: {"reset_url": "https://your-server.com/reset/abc123..."}
# Share this URL with the annotatorModo Sin Contraseña
Para demostraciones en clase, estudios rápidos o tareas que usan autenticación externa (MTurk, Prolific), puedes desactivar las contraseñas por completo:
authentication:
method: in_memory
require_password: falseLos anotadores escriben cualquier nombre de usuario para entrar y no aparece ninguna petición de contraseña. No es recomendable con datos sensibles ni en tareas que exijan identidad verificada.
Consulta Inicio de Sesión sin Contraseña para más detalles.
Referencia Completa
authentication:
method: in_memory # in_memory | database | oauth | clerk
# In-memory options
require_password: true
user_config_path: path/to/users.jsonl # optional persistence
# Database options (mutually exclusive with user_config_path)
database_url: "sqlite:///auth/users.db"
# Self-service reset
allow_password_reset: true
reset_token_ttl_hours: 24
user_config:
users:
- username: "researcher"
password: "secure-passphrase"
role: admin
- username: "annotator1"
password: "initial-pass"
role: annotatorLectura Adicional
- Autenticación SSO y OAuth — inicio de sesión con Google, GitHub o el SSO de tu institución
- Inicio de Sesión sin Contraseña — acceso solo con nombre de usuario para tareas abiertas
- Configuración de Producción — HTTPS y configuración del proxy inverso
- Panel de Administración — gestión de las cuentas de anotador
Para detalles de implementación, consulta la documentación fuente.