Forum eedomus http://forum.eedomus.fr/ |
|
Fonction OAuth 2.0 Authorization Basic Client Credentials http://forum.eedomus.fr/viewtopic.php?f=62&t=12087 |
Page 1 sur 1 |
Auteur: | dommarion [ 25 Nov 2023 09:42 ] |
Sujet du message: | Fonction OAuth 2.0 Authorization Basic Client Credentials |
Bonjour à tous, Je vous propose une fonction pour effectuer le OAuth 2.0 authorization Basic et Client Credentials (flux 3 et 4). ![]() Cette méthode repose sur un Client_id et Client_Secret et permet d'obtenir un Token a durée de vie illimitée (pas de Refresh Token) selon la spécification rfc6749. Pour obtenir ce token (flux 4), des éléments doivent être fournis tels que client_id, client_secret, uri, oauth_url (flux 3). Cette réquête sera insérée dans le header à la rubrique Authorization, avec d'autres éléments plus classiques d'un header de type Content-Type, grant_type. Le requête httpQuery() peut alors être envoyée avec les paramètres $url, 'POST', $post = $payload, $oauth_token = NULL, $header, $use_cookies = false, $ignore_errors = false, &$header_received, $user_pwd = NULL). En réponse on obtient une chaine Json avec le token, le token_type et dans le header de la réponse HTTP 200 OK. Il y a beaucoup de documentation à ce sujet sur internet, j'ai utilisé principalement celle-ci: https://www.rfc-editor.org/rfc/rfc6749.txt Le script PHP (compatible eedomus ![]() Il est important de déclarer dans le script principal: $client_id=xxxxxx; $client_secret=yyyyyy; $header_received=array(timeout=>5); $uri=<votre url du serveur>; $oauth_url=<le chemin url pour la demande de token>; on peut ensuite faire appel à la fonction sdk_OAuth2_basic_client_credentials().
Vos commentaires sont la bienvenue pour améliorer cette boîte à outils. Bonne weekend à toutes et tous. dommarion |
Auteur: | Clara79 [ 29 Nov 2023 12:44 ] |
Sujet du message: | Re: Fonction OAuth 2.0 Authorization Basic Client Credential |
Salut, tu nous proposes une fonction pour effectuer le OAuth 2.0 authorization Basic et Client Credentials. C'est cool, merci pour ton partage. Je trouve que ta fonction est bien écrite et documentée, et qu'elle peut être utile pour ceux qui veulent intégrer une authentification de type OAuth2.0 dans leur plugin. J'ai quelques questions et remarques à te faire : • Est-ce que tu as testé ta fonction avec différents services ou sites qui utilisent le OAuth 2.0 ? Est-ce qu'elle fonctionne bien avec tous les cas de figure ? • Est-ce que tu as prévu un moyen de gérer les erreurs ou les exceptions qui pourraient survenir lors de la requête httpQuery() ? Par exemple, si le serveur ne répond pas, ou si le token est invalide ou expiré ? • Est-ce que tu as pensé à sécuriser ton client_id et ton client_secret, qui sont des informations sensibles ? Par exemple, en les stockant dans un fichier crypté ou dans une base de données ? • Est-ce que tu as envisagé d'utiliser une bibliothèque PHP qui implémente le OAuth 2.0, comme [PHP OAuth 2.0 Client] ou [OAuth 2.0 Client for PHP] ? Cela pourrait te simplifier la vie et t'éviter de réinventer la roue. Voilà, ce sont mes questions et remarques. J'espère que tu ne les prends pas mal, c'est juste pour t'aider à améliorer ta boîte à outils. Je suis curieux de savoir ce que tu en penses, et si tu as d'autres astuces ou conseils à partager. Bonne journée ! |
Auteur: | dommarion [ 29 Nov 2023 23:12 ] |
Sujet du message: | Re: Fonction OAuth 2.0 Authorization Basic Client Credential |
Bonsoir Clara79, Merci pour ton intérêt et tes questions. J’ai testé cette routine sur 2 sites différents: Epson et Enedis. Les 2 répondent bien à la fonction (flux 3 et 4). Néanmoins dans le corps du programme j’ai effectivement mis un timeout à 5 secondes pour garantir une réponse et éviter que eedomus boucle et stoppe le programme après 30 secondes (voir mon commentaire "Il est important de déclarer dans le script principal: $client_id=xxxxxx; $client_secret=yyyyyy; $header_received=array(timeout=>5); $uri=<votre url du serveur>; $oauth_url=<le chemin url pour la demande de token>;"). Usuellement le cryptage ou l’encapsulage des données client_id et client_secret est réalisé par la team eedomus et n’est pas visible par les utilisateurs. En ce moment la team eedomus ne répond pas trop c’est pourquoi cette fonction est mise en boîte à outils de cette façon. Il est possible de ne laisser dans la fonction que le résultat de base64_encode(client_id:client_secret), ce qui ne change pas grand chose car cette fonction est bijective. La gestion des erreurs est faite dans le programme principal en décomposant $header_received. Bonne soirée, Dommarion |
Page 1 sur 1 | Le fuseau horaire est UTC+1 heure |
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/ |