- 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é
Pour commencer
Créer un nouveau projet Flask
Installer les dépendances
requirements.txt contenant les dépendances suivantes :Configuration de votre API Auth0
- Dashboard
- CLI
- Accédez au Auth0 Dashboard → Applications → APIs
- Cliquez sur Créer une API
- Saisissez les détails de votre API :
- Nom :
My Flask API - Identifiant :
https://my-flask-api(ce sera votre audience) - Algorithme de signature : RS256
- Nom :
- Cliquez sur Créer
- Copiez votre Domain à partir du Dashboard (sous Applications → Applications → [Votre application] → Settings)
- Copiez l’Identifiant que vous venez de créer (il s’agit de votre audience)
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.Définir les permissions d’API
- Dans le Auth0 Dashboard, accédez à Applications → APIs
- Sélectionnez votre API (
My Flask API) - Accédez à l’onglet Permissions
- Cliquez sur Add Permission
- Ajoutez la permission suivante :
- Permission (Scope) :
read:messages - Description :
Read messages
- Permission (Scope) :
- Cliquez sur Add
write:messages, delete:messages, etc. Le point de terminaison /api/private-scoped de ce Quickstart nécessite la permission read:messages.Configurer le client Auth0
.env a été créé automatiquement. Passez directement à la création du fichier app.py ci-dessous..env à la racine de votre projet pour y stocker votre configuration d’Auth0 :app.py et configurez le client API Auth0 :Créer des routes protégées
Lancez votre API
http://localhost:5000./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 permissionread:messages
Testez votre API
Obtenir un jeton de test
- Accédez au Auth0 Dashboard
- Accédez à Applications → APIs
- Sélectionnez votre API
- Accédez à l’onglet Test
- Copiez le jeton d’accès
Effectuer une requête
YOUR_ACCESS_TOKEN par le jeton que vous avez copié depuis l’Auth0 Dashboard.
Utilisation avancée
Validation des claims personnalisés
Validation des claims personnalisés
Authentification DPoP
Authentification DPoP
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.Autorisation basée sur les scopes
Autorisation basée sur les scopes
Pratiques exemplaires de gestion des erreurs
Pratiques exemplaires de gestion des erreurs
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.Utilisation du middleware before_request
Utilisation du middleware before_request
before_request de Flask pour valider les jetons de façon globale :Problèmes courants
401 Non autorisé - audience invalide
401 Non autorisé - audience invalide
- Vérifiez que
AUTH0_AUDIENCEdans votre fichier.envcorrespond exactement à votre identifiant d’API Auth0 - L’audience respecte la casse
- Assurez-vous que l’audience est au format URL ou URN (p. ex.,
https://my-apiet nonmy-api)
401 Non autorisé - issuer invalide
401 Non autorisé - issuer invalide
- Vérifiez que
AUTH0_DOMAINest correct (p. ex.,tenant.us.auth0.com) - N’incluez pas
https://dans le domaine - N’ajoutez pas de barre oblique à la fin
Valeurs de configuration introuvables
Valeurs de configuration introuvables
None ou erreurs liées aux variables d’environnementCause : Variables d’environnement non chargées ou fichier .env introuvableSolution :- Assurez-vous que le fichier
.envexiste à la racine de votre projet - Vérifiez que
load_dotenv()est appelé avant d’accéder àos.getenv() - Vérifiez que les noms de variables correspondent exactement (respect de la casse)
Erreurs de prise en charge asynchrone dans Flask
Erreurs de prise en charge asynchrone dans Flask
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 :- Mettez à niveau vers Flask 3.0 ou une version ultérieure :
pip install --upgrade flask - Assurez-vous que tous les gestionnaires de route qui utilisent
api_clientsont déclarés avecasync def - N’utilisez pas
asyncio.run()dans les gestionnaires de route
Erreurs de jeton expiré
Erreurs de jeton expiré
VerifyAccessTokenError: Token is expiredCause : Le jeton d’accès a dépassé sa date d’expirationSolution :- Demandez un nouveau jeton à partir de l’onglet Test de l’Auth0 Dashboard
- Implémentez l’actualisation du jeton dans votre application cliente
- Les jetons du Dashboard sont généralement valides pendant 24 heures