Saltar al contenido principal
Requisitos previos: Antes de comenzar, asegúrate de tener instalado lo siguiente:
  • 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
Compatibilidad de versiones de Flask: Esta guía de inicio rápido requiere Flask 3.0 o una versión posterior para el soporte nativo de async.

Primeros pasos

Esta guía muestra cómo integrar Auth0 con cualquier API de Python, nueva o existente, creada con Flask.
1

Crea un nuevo proyecto de Flask

Crea un directorio nuevo para tu API de Flask:
Cree un entorno virtual y actívelo:
2

Instala las dependencias

Crea un archivo requirements.txt con las siguientes dependencias:
requirements.txt
Instala las dependencias:
3

Configura tu API de Auth0

A continuación, debes crear una nueva API en tu inquilino de Auth0 y configurar tu aplicación.Puedes hacerlo automáticamente ejecutando un comando de la CLI o manualmente desde el Dashboard:
  1. Ve a Auth0 DashboardApplicationsAPIs
  2. Haz clic en Create API
  3. Introduce los datos de tu API:
    • Name: My Flask API
    • Identifier: https://my-flask-api (esta será tu audiencia)
    • Signing Algorithm: RS256
  4. Haz clic en Create
  5. Copia tu Domain desde el Dashboard (se encuentra en ApplicationsApplications[Your App]Settings)
  6. Copia el Identifier que acabas de crear (esta es tu audiencia)
Tu Domain no debe incluir 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.
4

Definir permisos de la API

Configure los permisos (alcances) de su API para controlar el acceso a recursos específicos:
  1. En el Auth0 Dashboard, vaya a ApplicationsAPIs
  2. Seleccione su API (My Flask API)
  3. Vaya a la pestaña Permissions
  4. Haga clic en Add Permission
  5. Agregue el siguiente permiso:
    • Permission (Scope): read:messages
    • Description: Read messages
  6. Haga clic en Add
Los permisos definen qué acciones se pueden realizar en su API. Puede agregar varios permisos, como write:messages, delete:messages, etc. El endpoint /api/private-scoped de esta guía de inicio rápido requiere el permiso read:messages.
5

Configura el cliente de Auth0

Si usaste el método de CLI en el paso 3, el archivo .env se creó automáticamente. Pasa directamente a crear el archivo app.py a continuación.
Si usaste el método del Dashboard, crea un archivo .env en la raíz del proyecto para almacenar la configuración de Auth0:
.env
Reemplace your-tenant.us.auth0.com por su dominio de Auth0 real y actualice API_IDENTIFIER para que coincida con el identificador de su API en el Dashboard.
Cree un archivo app.py y configure el cliente de la API de Auth0:
app.py
5

Crear rutas protegidas

Agregue un decorador para proteger las rutas y cree endpoints públicos y privados:
app.py
6

Ejecute la API

Inicia tu aplicación Flask:
Tu API ya se está ejecutando en http://localhost:5000.
Punto de controlAhora debería tener una API de Flask protegida con Auth0, totalmente funcional, ejecutándose en localhost con tres endpoints:
  • /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 permiso read:messages

Prueba tu API

Para probar tus endpoints protegidos, necesitas un token de acceso.

Obtén un token de prueba

  1. Ve al Auth0 Dashboard
  2. Ve a Applications → APIs
  3. Selecciona tu API
  4. Ve a la pestaña Test
  5. Copia el token de acceso

Haz una solicitud

Prueba el endpoint público (no se requiere ningún token):
Pruebe el endpoint protegido (requiere un token):
Sustituya YOUR_ACCESS_TOKEN por el token que copió del Auth0 Dashboard.

Uso avanzado

Exija que el token de acceso incluya claims específicos:
Para reforzar la seguridad, habilite DPoP (Demonstrating Proof-of-Possession). DPoP mejora OAuth 2.0 al vincular los tokens de acceso a claves criptográficas.
El método 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.
Cree un decorador para comprobar alcances específicos:
Implemente un manejo integral de errores con tipos de error específicos:
Todos los errores de autenticación heredan de BaseAuthError, que proporciona métodos como get_status_code(), get_headers() y get_error_code() para devolver respuestas HTTP correctas con encabezados WWW-Authenticate.
En aplicaciones en las que la mayoría de los endpoints requieren autenticación, use before_request de Flask para validar tokens de forma global:

Problemas comunes

Síntoma: Se producen errores 401 incluso con tokens que parecen válidosCausa: La audiencia del token no coincide con la audiencia configurada en el cliente de tu APISolución:
  1. Verifica que AUTH0_AUDIENCE en tu archivo .env coincida exactamente con el Identificador de API de Auth0
  2. La audiencia distingue entre mayúsculas y minúsculas
  3. Asegúrate de que la audiencia tenga formato de URL o URN (por ejemplo, https://my-api, no my-api)
Síntoma: La validación del token falla porque el emisor no coincideCausa: La configuración del dominio no coincide con el emisor del tokenSolución:
  1. Verifica que AUTH0_DOMAIN sea correcto (por ejemplo, tenant.us.auth0.com)
  2. No incluyas https:// en el dominio
  3. No incluyas una barra diagonal al final
Síntoma: Valores None o errores de variables de entornoCausa: Las variables de entorno no se cargaron o no se encontró el archivo .envSolución:
  1. Asegúrate de que el archivo .env exista en la raíz de tu proyecto
  2. Verifica que se llame a load_dotenv() antes de acceder a os.getenv()
  3. Comprueba que los nombres de las variables coincidan exactamente (distinguen entre mayúsculas y minúsculas)
Síntoma: 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:
  1. Actualiza a Flask 3.0 o superior: pip install --upgrade flask
  2. Asegúrate de que todos los controladores de ruta que usan api_client estén declarados como async def
  3. No uses asyncio.run() dentro de los controladores de ruta
Síntoma: VerifyAccessTokenError: Token is expiredCausa: El token de acceso ya superó su tiempo de expiraciónSolución:
  1. Solicita un token nuevo desde la pestaña Test de Auth0 Dashboard
  2. Implementa la renovación de tokens en tu aplicación cliente
  3. Los tokens del Dashboard suelen ser válidos durante 24 horas
Síntoma: Error Missing or invalid authorization headerCausa: La solicitud no incluye el encabezado Authorization o usa un formato incorrectoSolución:
  1. Asegúrate de que el encabezado se llame Authorization (A mayúscula)
  2. Usa el formato: Authorization: Bearer YOUR_TOKEN
  3. No incluyas comillas alrededor del token

Recursos adicionales

Documentación del SDK

Documentación completa del SDK y referencia de la API

Documentación de Flask

Documentación oficial del framework Flask

Auth0 Dashboard

Gestiona tu inquilino de Auth0 y tus API

Guía de autenticación de API

Más información sobre los tokens de acceso y la seguridad de las API

Documentación de DPoP

Más información sobre la seguridad basada en prueba de posesión

Foro de la comunidad

Obtén ayuda de la comunidad de Auth0

Próximos pasos

Consulta el repositorio de ejemplos de la API de Auth0 para Python para ver ejemplos funcionales completos con Flask.