Skip to main content
Prérequis : Avant de commencer, assurez-vous d’avoir les éléments suivants installés :
  • Python 3.9 ou une version ultérieure
  • pip ou le gestionnaire de paquets Poetry
  • jq - Requis pour la configuration d’Auth0 CLI
  • Votre éditeur de code préféré
Compatibilité des versions de Flask : Ce Quickstart nécessite Flask 3.0 ou une version ultérieure pour la prise en charge native de l’asynchrone.

Pour commencer

Ce guide explique comment intégrer Auth0 à n’importe quelle API Python, nouvelle ou existante, créée avec Flask.
1

Créer un nouveau projet Flask

Créez un nouveau dossier pour votre API Flask :
Créez un environnement virtuel et activez-le :
2

Installer les dépendances

Créez un fichier requirements.txt contenant les dépendances suivantes :
requirements.txt
Installez les dépendances :
3

Configuration de votre API Auth0

Ensuite, vous devez créer une nouvelle API dans votre tenant Auth0 et configurer votre application.Vous pouvez le faire automatiquement en exécutant une commande CLI, ou manuellement dans le Dashboard :
  1. Accédez au Auth0 DashboardApplicationsAPIs
  2. Cliquez sur Créer une API
  3. Saisissez les détails de votre API :
    • Nom : My Flask API
    • Identifiant : https://my-flask-api (ce sera votre audience)
    • Algorithme de signature : RS256
  4. Cliquez sur Créer
  5. Copiez votre Domain à partir du Dashboard (sous ApplicationsApplications[Votre application]Settings)
  6. Copiez l’Identifiant que vous venez de créer (il s’agit de votre audience)
Votre Domain ne doit pas inclure https:// — utilisez seulement le nom de domaine (p. ex. your-tenant.auth0.com).L’Audience (identifiant d’API) est un identifiant unique pour votre API et peut être n’importe quel URI valide.
4

Définir les permissions d’API

Configurez les permissions (scopes) de votre API pour contrôler l’accès à des ressources précises :
  1. Dans le Auth0 Dashboard, accédez à ApplicationsAPIs
  2. Sélectionnez votre API (My Flask API)
  3. Accédez à l’onglet Permissions
  4. Cliquez sur Add Permission
  5. Ajoutez la permission suivante :
    • Permission (Scope) : read:messages
    • Description : Read messages
  6. Cliquez sur Add
Les permissions définissent les actions qui peuvent être effectuées sur votre API. Vous pouvez ajouter plusieurs permissions, comme write:messages, delete:messages, etc. Le point de terminaison /api/private-scoped de ce Quickstart nécessite la permission read:messages.
5

Configurer le client Auth0

Si vous avez utilisé la méthode CLI à l’étape 3, votre fichier .env a été créé automatiquement. Passez directement à la création du fichier app.py ci-dessous.
Si vous avez utilisé la méthode Dashboard, créez un fichier .env à la racine de votre projet pour y stocker votre configuration d’Auth0 :
.env
Remplacez your-tenant.us.auth0.com par votre domaine Auth0 réel et mettez à jour API_IDENTIFIER pour qu’il corresponde à l’identifiant de votre API dans le dashboard.
Créez un fichier app.py et configurez le client API Auth0 :
app.py
5

Créer des routes protégées

Ajoutez un décorateur pour protéger les routes et créez des endpoints publics et privés :
app.py
6

Lancez votre API

Démarrez votre application Flask :
Votre API fonctionne maintenant à l’adresse http://localhost:5000.
VérificationVous devriez maintenant avoir une API Flask protégée par Auth0 entièrement fonctionnelle qui s’exécute sur votre hôte local, avec trois points de terminaison :
  • /api/public - Accessible sans authentification
  • /api/private - Nécessite un jeton d’accès Auth0 valide
  • /api/private-scoped - Nécessite une authentification et la permission read:messages

Testez votre API

Pour tester vos points de terminaison protégés, vous avez besoin d’un jeton d’accès.

Obtenir un jeton de test

  1. Accédez au Auth0 Dashboard
  2. Accédez à Applications → APIs
  3. Sélectionnez votre API
  4. Accédez à l’onglet Test
  5. Copiez le jeton d’accès

Effectuer une requête

Testez le point de terminaison public (aucun jeton requis) :
Testez l’endpoint protégé (jeton requis) :
Remplacez YOUR_ACCESS_TOKEN par le jeton que vous avez copié depuis l’Auth0 Dashboard.

Utilisation avancée

Exigez la présence de claims précis dans le jeton d’accès :
Pour une sécurité accrue, activez DPoP (Demonstrating Proof-of-Possession). DPoP renforce OAuth 2.0 en liant les jetons d’accès à des clés cryptographiques.
La méthode verify_request() détecte automatiquement si la requête utilise l’authentification Bearer ou DPoP. Lorsque DPoP est utilisé, elle valide à la fois le jeton d’accès et la preuve DPoP conformément à la RFC 9449.
Créez un décorateur pour vérifier des scopes précis :
Mettez en place une gestion complète des erreurs avec des types d’erreur précis :
Toutes les erreurs d’authentification dérivent de BaseAuthError, qui fournit des méthodes comme get_status_code(), get_headers() et get_error_code() pour générer des réponses HTTP appropriées avec des en-têtes WWW-Authenticate.
Pour les applications où la plupart des points de terminaison exigent une authentification, utilisez before_request de Flask pour valider les jetons de façon globale :

Problèmes courants

Symptôme : Vous obtenez des erreurs 401 même avec des jetons qui semblent validesCause : L’audience de votre jeton ne correspond pas à celle configurée dans votre client APISolution :
  1. Vérifiez que AUTH0_AUDIENCE dans votre fichier .env correspond exactement à votre identifiant d’API Auth0
  2. L’audience respecte la casse
  3. Assurez-vous que l’audience est au format URL ou URN (p. ex., https://my-api et non my-api)
Symptôme : La validation du jeton échoue en raison d’une non-correspondance de l’issuerCause : La configuration du domaine ne correspond pas à l’issuer du jetonSolution :
  1. Vérifiez que AUTH0_DOMAIN est correct (p. ex., tenant.us.auth0.com)
  2. N’incluez pas https:// dans le domaine
  3. N’ajoutez pas de barre oblique à la fin
Symptôme : Valeurs None ou erreurs liées aux variables d’environnementCause : Variables d’environnement non chargées ou fichier .env introuvableSolution :
  1. Assurez-vous que le fichier .env existe à la racine de votre projet
  2. Vérifiez que load_dotenv() est appelé avant d’accéder à os.getenv()
  3. Vérifiez que les noms de variables correspondent exactement (respect de la casse)
Symptôme : RuntimeError: This event loop is already running ou erreurs async semblablesCause : Utilisation de routes async sans Flask 3.0+ ou mélange incorrect de sync et d’asyncSolution :
  1. Mettez à niveau vers Flask 3.0 ou une version ultérieure : pip install --upgrade flask
  2. Assurez-vous que tous les gestionnaires de route qui utilisent api_client sont déclarés avec async def
  3. N’utilisez pas asyncio.run() dans les gestionnaires de route
Symptôme : VerifyAccessTokenError: Token is expiredCause : Le jeton d’accès a dépassé sa date d’expirationSolution :
  1. Demandez un nouveau jeton à partir de l’onglet Test de l’Auth0 Dashboard
  2. Implémentez l’actualisation du jeton dans votre application cliente
  3. Les jetons du Dashboard sont généralement valides pendant 24 heures
Symptôme : Erreur Missing or invalid authorization headerCause : La requête n’inclut pas l’en-tête Authorization ou utilise un format incorrectSolution :
  1. Assurez-vous que l’en-tête s’appelle Authorization (A majuscule)
  2. Utilisez le format : Authorization: Bearer YOUR_TOKEN
  3. N’incluez pas de guillemets autour du jeton

Ressources supplémentaires

Documentation du SDK

Documentation complète du SDK et référence de l’API

Documentation Flask

Documentation officielle du framework Flask

Auth0 Dashboard

Gérez votre tenant Auth0 et vos API

Guide d’authentification des API

En savoir plus sur les jetons d’accès et la sécurité des API

DPoP Documentation

En savoir plus sur la sécurité par preuve de possession

Forum de la communauté

Obtenez de l’aide auprès de la communauté Auth0

Étapes suivantes

Consultez le dépôt d’exemples de l’API Python d’Auth0 pour voir des exemples complets et fonctionnels avec Flask.