- Python 3.9 o una versión posterior
- pip o el gestor de paquetes Poetry
- jq - Necesario para configurar Auth0 CLI
- Tu editor de código preferido
Primeros pasos
Crea un nuevo proyecto de Flask
Instala las dependencias
requirements.txt con las siguientes dependencias:Configura tu API de Auth0
- Dashboard
- CLI
- Ve a Auth0 Dashboard → Applications → APIs
- Haz clic en Create API
- Introduce los datos de tu API:
- Name:
My Flask API - Identifier:
https://my-flask-api(esta será tu audiencia) - Signing Algorithm: RS256
- Name:
- Haz clic en Create
- Copia tu Domain desde el Dashboard (se encuentra en Applications → Applications → [Your App] → Settings)
- Copia el Identifier que acabas de crear (esta es tu audiencia)
https://; usa solo el nombre de dominio (por ejemplo, your-tenant.auth0.com).La Audiencia (identificador de la API) es un identificador único para tu API y puede ser cualquier URI válida.Definir permisos de la API
- En el Auth0 Dashboard, vaya a Applications → APIs
- Seleccione su API (
My Flask API) - Vaya a la pestaña Permissions
- Haga clic en Add Permission
- Agregue el siguiente permiso:
- Permission (Scope):
read:messages - Description:
Read messages
- Permission (Scope):
- Haga clic en Add
write:messages, delete:messages, etc. El endpoint /api/private-scoped de esta guía de inicio rápido requiere el permiso read:messages.Configura el cliente de Auth0
.env se creó automáticamente. Pasa directamente a crear el archivo app.py a continuación..env en la raíz del proyecto para almacenar la configuración de Auth0:app.py y configure el cliente de la API de Auth0:Crear rutas protegidas
/api/public- Accesible sin autenticación/api/private- Requiere un token de acceso válido de Auth0/api/private-scoped- Requiere autenticación y el permisoread:messages
Prueba tu API
Obtén un token de prueba
- Ve al Auth0 Dashboard
- Ve a Applications → APIs
- Selecciona tu API
- Ve a la pestaña Test
- Copia el token de acceso
Haz una solicitud
YOUR_ACCESS_TOKEN por el token que copió del Auth0 Dashboard.
Uso avanzado
Validar claims personalizados
Validar claims personalizados
Autenticación DPoP
Autenticación DPoP
verify_request() detecta automáticamente si la solicitud usa autenticación Bearer o DPoP. Cuando se usa DPoP, valida tanto el token de acceso como la prueba DPoP conforme a RFC 9449.Autorización basada en alcances
Autorización basada en alcances
Prácticas recomendadas para el manejo de errores
Prácticas recomendadas para el manejo de errores
BaseAuthError, que proporciona métodos como get_status_code(), get_headers() y get_error_code() para devolver respuestas HTTP correctas con encabezados WWW-Authenticate.Uso del middleware before_request
Uso del middleware before_request
before_request de Flask para validar tokens de forma global:Problemas comunes
401 No autorizado: audiencia no válida
401 No autorizado: audiencia no válida
- Verifica que
AUTH0_AUDIENCEen tu archivo.envcoincida exactamente con el Identificador de API de Auth0 - La audiencia distingue entre mayúsculas y minúsculas
- Asegúrate de que la audiencia tenga formato de URL o URN (por ejemplo,
https://my-api, nomy-api)
401 No autorizado: emisor no válido
401 No autorizado: emisor no válido
- Verifica que
AUTH0_DOMAINsea correcto (por ejemplo,tenant.us.auth0.com) - No incluyas
https://en el dominio - No incluyas una barra diagonal al final
No se encontraron valores de configuración
No se encontraron valores de configuración
None o errores de variables de entornoCausa: Las variables de entorno no se cargaron o no se encontró el archivo .envSolución:- Asegúrate de que el archivo
.envexista en la raíz de tu proyecto - Verifica que se llame a
load_dotenv()antes de acceder aos.getenv() - Comprueba que los nombres de las variables coincidan exactamente (distinguen entre mayúsculas y minúsculas)
Errores de soporte async en Flask
Errores de soporte async en Flask
RuntimeError: This event loop is already running u otros errores async similaresCausa: Usar rutas async sin Flask 3.0+ o mezclar sync y async de forma incorrectaSolución:- Actualiza a Flask 3.0 o superior:
pip install --upgrade flask - Asegúrate de que todos los controladores de ruta que usan
api_clientestén declarados comoasync def - No uses
asyncio.run()dentro de los controladores de ruta
Errores de token expirado
Errores de token expirado
VerifyAccessTokenError: Token is expiredCausa: El token de acceso ya superó su tiempo de expiraciónSolución:- Solicita un token nuevo desde la pestaña Test de Auth0 Dashboard
- Implementa la renovación de tokens en tu aplicación cliente
- Los tokens del Dashboard suelen ser válidos durante 24 horas
Falta el encabezado Authorization
Falta el encabezado Authorization