Guide d’authentification du SDK Python de Frame.io
Guide d’authentification du SDK Python de Frame.io
Ce guide explique comment s’authentifier auprès de l’API Frame.io à l’aide du SDK Python Frame.io (frameio). L’API Frame.io V4 utilise le service Adobe Identity Management (IMS), la plateforme d’authentification OAuth 2.0 d’Adobe. Il s’agit d’un guide de référence autonome destiné aux développeurs Python. Tous les exemples de code et les flux ci-dessous concernent exclusivement le package frameio.
Types d’authentification dans le SDK Python
Le SDK Python prend en charge quatre options d’authentification :
L’option Informations d’identification pour une application native d’Adobe nécessite des gestionnaires de schéma URI personnalisés (p. ex. adobe+<hash>://…</hash>) qui interceptent les redirections au niveau du système d’exploitation. Python n’a pas de moyen standard pour enregistrer de tels gestionnaires, donc le SDK Python n’offre pas de classe NativeAppAuth. Pour les applications Python qui sollicitent une interaction de l’utilisateur, utilisez WebAppAuth avec un serveur de rappel local (p. ex. Flask ou FastAPI). Pour les charges de travail sans interaction, utilisez ServerToServerAuth.
Utilisateurs de comptes de service
Lorsque vous utilisez l’authentification de serveur à serveur, votre application agit en tant qu’utilisateur de compte de service, un type de compte distinct qui peut effectuer des actions au nom du service. Ces informations sont visibles par les autres utilisateurs de Frame.io : lorsqu’un compte de service effectue une action, son nom s’affiche dans l’interface utilisateur. Vous pouvez accorder ou révoquer l’accès à un compte de service via l’Adobe Admin Console et la Developer Console. Les noms des comptes de service sont gérés depuis l’interface utilisateur de Frame.io. Par défaut, votre première connexion S2S est nommée Service Account User, la deuxième ** Service Account User 2**, et ainsi de suite.
Voir Automatiser votre configuration grâce à la prise en charge de serveur à serveur de Frame.io pour en savoir plus.
Démarrage rapide
Conditions préalables
- Informations d’identification de l’Adobe Developer Console :
- ID client (obligatoire pour tous les flux OAuth), Secret client (obligatoire pour les flux serveur à serveur et les flux d’application web), URI de redirection (obligatoire pour les flux d’application web et les flux SPA). Ces informations doivent être enregistrées dans votre projet Adobe.
- Installer le SDK :
Choisir une méthode
- Aucun utilisateur n’est concerné ? Utilisez l’authentification serveur à serveur (
ServerToServerAuth). - L’utilisateur est concerné et vous pouvez enregistrer un secret ? Utilisez l’authentification par application web (
WebAppAuth). - L’utilisateur est concerné et vous ne pouvez pas enregistrer un secret ? Utilisez l’authentification SPA (
SPAAuth).
Jeton d’accès
Si vous disposez déjà d’un jeton d’accès (provenant d’un autre système OAuth ou d’un échange précédent, par exemple via notre Explorateur des API), vous pouvez le transmettre directement :
C’est la méthode la plus simple, mais le jeton finira par expirer et le SDK ne le renouvellera pas pour vous.
Jetons de développeur hérités
Pour les comptes ayant migré vers la version 4 et qui ne sont pas encore gérés via l’Adobe Admin Console, vous pouvez continuer à utiliser les jetons de développeur hérités disponibles sur le site des développeurs Frame.io. Vous devez inclure l’en-tête x-frameio-legacy-token-auth et le configurer sur true :
Les jetons de développeur hérités n’expirent pas, mais ils constituent un mécanisme transitoire. Pour les nouvelles intégrations et les charges de travail en production, nous vous recommandons d’utiliser l’un des flux OAuth 2.0 ci-dessous. Pour plus de détails, consultez le guide de migration.
Authentification de serveur à serveur (Informations d’identification)
Utilisez cette option pour les services et scripts backend qui nécessitent un accès à Frame.io sans intervention de l’utilisateur. Ce flux n’est disponible que pour les comptes Frame.io V4 gérés via l’Adobe Admin Console. Votre application s’authentifie en tant qu’utilisateur de compte de service sans intervention humaine.
Sync
Async
Et voilà. auth.get_token est une fonction que le SDK appelle à chaque requête. Si le jeton actuel est toujours valide, il est renvoyé immédiatement. S’il est sur le point d’expirer, le système en récupère d’abord un nouveau, de manière totalement transparente.
Fonctionnement
Vos informations d’identification client (ID client + secret) n’expirent jamais. Vous ne les changez manuellement que pour des raisons de sécurité. L’authentification S2S vous offre un accès à l’API pratiquement permanent et ininterrompu, sans aucune intervention manuelle.
En coulisses :
- Lors du premier appel d’API,
get_tokenprésente une requête pour obtenir un nouveau jeton d’accès à Adobe IMS en utilisant le mode d’autorisationclient_credentials. - Le jeton est mis en cache en mémoire. Les jetons d’accès individuels expirent (généralement au bout de 24 heures), mais cette gestion est prise en charge pour vous.
- Lorsqu’un jeton mis en cache se trouve dans la mémoire tampon d’actualisation (par défaut : 60 secondes avant son expiration), le SDK en récupère automatiquement un nouveau en utilisant les mêmes informations d’identification.
- Aucun jeton d’actualisation n’est utilisé. Les informations d’identification du client constituent en elles-mêmes un secret à long terme et peuvent toujours être utilisées pour générer un nouveau jeton d’accès.
Authentification explicite
Si vous souhaitez récupérer le jeton dès le début (par exemple, pour détecter rapidement les informations d’identification incorrectes au démarrage) :
Application web (code d’autorisation)
Utilisez cette option pour les applications côté serveur dans lesquelles les utilisateurs se connectent à l’aide de leur Adobe ID. Ce flux nécessite un secret client, qui doit être stocké en toute sécurité sur votre serveur.
Gérer le rappel
Lorsqu’Adobe IMS redirige l’utilisateur vers votre redirectUri, extrayez les paramètres code et state. Vérifiez que l’état correspond bien à ce que vous avez enregistré, puis échangez le code contre des jetons :
Sync
Async
Cette opération permet d’échanger le code d’autorisation contre un jeton d’accès et un jeton d’actualisation, qui sont tous deux enregistrés en interne.
Exemple Flask complet
Application monopage / PKCE (code d’autorisation + PKCE)
Utilisez cette option pour les applications web, les applications de bureau ou les outils en ligne de commande qui ne peuvent pas stocker un secret client en toute sécurité. Ce flux utilise le protocole PKCE (RFC 7636) pour sécuriser l’échange de codes d’autorisation.
Générer l’URL d’autorisation
Sync
Async
get_authorization_url renvoie un AuthorizationUrlResult contenant l’URL complète (avec le PKCE code_challenge intégré) et le code_verifier dont vous aurez besoin à l’étape suivante.
Utiliser le client
Sync
Async
Et voilà. La mise à jour fonctionne de la même manière que pour l’application web : le SDK utilise automatiquement le jeton de mise à jour. La différence réside dans le fait qu’aucun secret client n’est transmis lors de l’actualisation, car le flux SPA est conçu pour les clients publics.
Utilisation d’Async
Chaque classe d’authentification possède une version asynchrone dont le nom porte le préfixe Async. Les exemples de code ci-dessus comportent des onglets Sync et Async lorsque cela s’y prête.
Actualisation manuelle des jetons
Pour les flux des applications web et des SPA, le SDK actualise automatiquement les jetons via get_token. Si vous avez besoin d’un contrôle explicite, vous pouvez appeler refresh() directement :
Sync
Async
Cela s’avère utile lorsque vous souhaitez forcer une actualisation avant une opération critique, plutôt que de compter sur la mémoire tampon d’actualisation automatique.
Persistance des jetons
Toutes les classes d’authentification prennent en charge les méthodes export_tokens() et import_tokens() pour conserver l’état des jetons entre les redémarrages. Cela revêt une importance particulière pour les flux des applications web et des SPA, car les jetons d’accès et d’actualisation sont conservés en mémoire par défaut : si votre application redémarre, les utilisateurs devront se réauthentifier, à moins que vous ne les conserviez en mémoire. Pour les communications de serveur à serveur, la persistance est facultative (les informations d’identification du client permettent toujours de générer un nouveau jeton), mais l’importation d’un jeton mis en cache évite un aller-retour supplémentaire au démarrage.
Exporter et importer
Persistance automatique avec on_token_refreshed
Pour conserver automatiquement les jetons chaque fois qu’ils sont actualisés, utilisez le rappel on_token_refreshed :
Le rappel reçoit un dictionnaire de même structure que export_tokens() et se déclenche après chaque actualisation réussie des jetons. Pour les classes asynchrones, on_token_refreshed peut être soit une fonction classique, soit une fonction async. Les deux sont prises en charge.
Révocation des jetons
Pour déconnecter un utilisateur et invalider ses jetons avec Adobe IMS :
Cette opération envoie une requête de révocation (au mieux) à Adobe IMS pour le jeton d’accès et le jeton d’actualisation, puis efface l’état de tous les jetons locaux. Une fois l’accès révoqué, l’utilisateur devra s’authentifier à nouveau.
Pour les classes asynchrones, utilisez await auth.revoke().
Gestion des erreurs
Toutes les erreurs d’authentification sont dérivées de FrameioAuthError. Vous pouvez donc les traiter de manière globale ou gérer des cas particuliers :
Références des erreurs
Gestion des jetons d’actualisation expirés en production
Pour les flux des applications web et des SPA, le jeton d’actualisation finira par expirer. Quand cela arrive, get_token déclenche TokenExpiredError. Vous devriez détecter cette situation et rediriger l’utilisateur vers le flux d’autorisation.
Référence de configuration
Toutes les classes d’authentification acceptent ces paramètres facultatifs :
Référence de paramètre
Environnements d’évaluation
Pointe vers une instance Adobe IMS d’évaluation en ignorant ims_base_url. Le SDK exporte également DEFAULT_IMS_BASE_URL (https://ims-na1.adobelogin.com) si vous devez accéder à la valeur de production par programmation.
Client HTTP personnalisé
Pour l’assistance relative aux serveurs proxy ou la configuration TLS personnalisée :
Sécurité des threads
Les classes d’authentification de synchronisation sont entièrement thread-safe. Lorsque plusieurs threads appellent get_token simultanément et qu’une actualisation est nécessaire, un seul thread effectue cette actualisation. Les autres attendent et obtiennent le même résultat. Aucun verrouillage externe n’est nécessaire. Les classes asynchrones offrent la même garantie en utilisant asyncio.Lock, compatible avec l’exécution simultanée de coroutines au sein d’une même boucle d’événements.