Frappe Framework
Client OAuth générique
La Connected App garde les identifiants OAuth. L’intégration la désigne depuis un DocType de réglages, puis obtient une session authentifiée.
Prérequis
La Connected App stocke l’identifiant client, le secret, les périmètres (scopes) et les points d’entrée de la plateforme visée.
Relier l’intégration
L’exemple utilise Google, mais tout service OAuth 2.0 convient. L’intégration a en général un DocType de réglages, par exemple Google Settings, avec un champ Lien vers Connected App. Un System Manager crée ensuite la Connected App, y saisit les identifiants et la relie à l’intégration. Le DocType de réglages dit quelle Connected App appartient à l’intégration.
google_settings = frappe.get_single("Google Settings")
connected_app_name = google_settings.get("connected_app")
connected_app = frappe.get_doc("Connected App", connected_app_name)L’instance contient les identifiants et les URI. Si l’utilisateur n’est pas encore connecté, il ouvre la Connected App et clique sur le bouton « Connect to ... » en haut à droite. On peut aussi récupérer l’URI d’autorisation pour un bouton ou une redirection maison :
authorization_uri = connected_app.initiate_web_application_flow()Session authentifiée
session = connected_app.get_oauth2_session()Si l’utilisateur n’est pas authentifié à ce moment, il est redirigé vers la page d’authentification. Ensuite, toute ressource autorisée se lit avec la session, par exemple session.get("https://www.googleapis.com/oauth2/v2/userinfo"). Si le jeton d’accès a expiré, la session tente de le rafraîchir.
Point d’attention
get_oauth2_session redirige tant que l’utilisateur n’a pas autorisé l’application. Le rafraîchissement du jeton est automatique d’après la source, qui ne montre pas le code de ce rafraîchissement.
