- Python 3.9 ou version ultérieure
- Le gestionnaire de paquets pip ou Poetry
- jq - Requis pour configurer l’interface de ligne de commande d’Auth0
- Votre éditeur de code préféré
Pour commencer
Créez un nouveau projet Flask
Installer les dépendances
requirements.txt contenant les dépendances suivantes :Configurez votre API Auth0
- Dashboard
- CLI
- Accédez à Auth0 Dashboard → Applications → APIs
- Cliquez sur Create 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 Create
- Copiez votre Domaine depuis le Dashboard (sous Applications → Applications → [Your App] → Settings)
- Copiez l’Identifiant que vous venez de créer (il s’agit de votre audience)
https:// — utilisez uniquement le nom de domaine (par exemple, your-tenant.auth0.com).L’Audience (identifiant de l’API) est un identifiant unique pour votre API et peut être n’importe quel URI valide.Définir les autorisations de l’API
- Dans le Auth0 Dashboard, accédez à Applications → APIs
- Sélectionnez votre API (
My Flask API) - Ouvrez l’onglet Permissions
- Cliquez sur Add Permission
- Ajoutez l’autorisation 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 guide de démarrage rapide nécessite l’autorisation read:messages.Configurer l’application 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 Auth0 :app.py et configurez le client API Auth0 :Créer des routes protégées
/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 à l’Auth0 Dashboard
- Accédez à Applications → APIs
- Sélectionnez votre API
- Ouvrez l’onglet Test
- Copiez le jeton d’accès
Effectuer une requête
YOUR_ACCESS_TOKEN par le jeton que vous avez copié dans l’Auth0 Dashboard.
Utilisation avancée
Validation des revendications personnalisées
Validation des revendications personnalisées
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 renvoyer 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 à l’identifiant de l’API Auth0 - L’audience est sensible à la casse
- Assurez-vous que l’audience est au format URL ou URN (par ex. :
https://my-apiet nonmy-api)
401 Non autorisé - Émetteur invalide
401 Non autorisé - Émetteur invalide
- Vérifiez que
AUTH0_DOMAINest correct (par 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 : Les variables d’environnement ne sont pas chargées ou le fichier .env est 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 des variables correspondent exactement (respect de la casse)
Erreurs de prise en charge async dans Flask
Erreurs de prise en charge async dans Flask
RuntimeError: This event loop is already running ou erreurs async semblablesCause : Utilisation de routes async sans Flask 3.0+ ou mélange inadéquat de sync et d’asyncSolution :- Passez à Flask 3.0 ou version ultérieure :
pip install --upgrade flask - Assurez-vous que tous les gestionnaires de routes qui utilisent
api_clientsont déclarés avecasync def - N’utilisez pas
asyncio.run()dans les gestionnaires de routes
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 dans Auth0 Dashboard
- Implémentez le renouvellement du jeton dans votre application cliente
- Les jetons du Dashboard sont généralement valides pendant 24 heures
En-tête Authorization manquant
En-tête Authorization manquant