Manejo de contraseñas y credenciales
Hash de contraseñas con argon2 o bcrypt.
Receta
Tarjeta de receta de referencia rápida, lista para copiar y pegar.
from argon2 import PasswordHasher
ph = PasswordHasher()
hash = ph.hash("correct horse battery staple")Cuándo usar esto:
- Registro de usuarios
- Flujos de restablecimiento de contraseña
- Nunca almacenes en texto plano
Ejemplo funcional
ph.verify(hash, password) # lanza una excepción si no coincideLo que esto demuestra:
- Hashing con argon2
- Paso de verificación
- Sal (salt) por contraseña
Análisis detallado
Cómo funciona
- El hashing es unidireccional; usa
verify(verificar) en lugar decompare(comparar). - Ajusta el coste de memoria/tiempo de argon2.
- Limita la tasa de intentos de inicio de sesión.
Errores comunes
- Validación de límites omitida: Datos inválidos llegan a las capas de persistencia. Solución: Valida con Pydantic o formularios del framework en el borde.
- Fugas de rastreos de pila (stack traces): Los clientes ven errores internos. Solución: Mapea excepciones a respuestas HTTP estables.
- Bloqueo de bucles de eventos asíncronos: Los trabajadores se detienen bajo carga concurrente. Solución: Usa controladores asíncronos o envoltorios de
threadpool. - Secretos en control de código fuente: Las credenciales se filtran a través del historial de git. Solución: Carga secretos desde variables de entorno o una bóveda en tiempo de ejecución.
- Falta de observabilidad: Los incidentes son difíciles de depurar. Solución: Añade logs estructurados, métricas e IDs de solicitud.
Alternativas
| Alternativa | Úsalo cuando | No lo uses cuando |
|---|---|---|
| Framework alternativo en este cookbook | Estándar del equipo o monolito existente | API nueva (Greenfield) con restricciones diferentes |
| BaaS gestionado | MVP solo CRUD | Autenticación personalizada, flujos de trabajo o necesidades de cumplimiento |
| gRPC | RPC interno de alto rendimiento | Clientes HTTP públicos y acceso al navegador |
Preguntas frecuentes
¿Cuándo debería adoptar el hashing de contraseñas?
Úsalo cuando los patrones y las compensaciones de esta página coincidan con tu API o límite de datos.
¿Cuál es el principal error de producción con el hashing de contraseñas?
Omitir la validación, los tiempos de espera o los contratos de error explícitos en el borde HTTP.
¿Cómo pruebo el hashing de contraseñas?
Usa el cliente de pruebas del framework, anula las dependencias y afirma el estado más la forma del JSON.
¿El hashing de contraseñas funciona con Python 3.14?
Sí, los ejemplos se dirigen a Python 3.14 con versiones de framework fijadas del pie de página de la pila.
¿Cómo se relaciona el hashing de contraseñas con Pydantic 2?
Valida y serializa en los límites; mantén los servicios funcionando con objetos de dominio tipados.
¿Síncrono o asíncrono?
Prefiere rutas asíncronas cuando la E/S domina; mantén el trabajo de CPU pequeño o descárgalo a trabajadores.
¿Dónde debe vivir la lógica de negocio?
Controladores (handlers) delgados; los servicios poseen las reglas; los repositorios poseen las consultas.
¿Cómo documento las APIs?
Publica documentación OpenAPI o de esquema que coincida con los modelos de respuesta en el código.
¿Cómo manejo el versionado?
Versionado explícito por URL o encabezado con ventanas de deprecación; evita roturas silenciosas.
¿Qué debo leer a continuación?
Sigue los enlaces Relacionados para obtener la siguiente capa de profundidad en esta sección.
¿Cómo me mantengo seguro?
Autentica a los llamadores, autoriza por recurso, limita la tasa y nunca registres secretos.
¿Primer paso para el rendimiento?
Mide la latencia de la base de datos y de los sistemas externos antes de cambiar de framework.
Relacionado
- Conceptos básicos de diseño de API - Convenciones REST
- OAuth2 y JWT - Flujos de tokens
- Gestión de secretos - Entornos y bóvedas
- Validación de entrada e inyección - Defensas
Versiones de la pila: Esta página fue escrita para Python 3.14.0 (estable 3.14, mantenimiento 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ y uv 0.6+.