Fonction OAuth 2.0 Authorization Basic Owner Password Creden


Fonction OAuth 2.0 Authorization Basic Owner Password Creden

Messagepar dommarion » 23 Jan 2024 22:32

Bonjour à toutes et tous,
Je vous propose une fonction pour effectuer le OAuth 2.0 authorization Basic et Owner Password Credentials (flux 3 et 4). :ugeek:
Cette méthode repose sur un identifant, un mot de passe, clef propriétaire et permet d'obtenir un Token a durée de vie limitée (Refresh Token nécessaire) selon la spécification rfc6749.
Pour obtenir ce token (flux 4), des éléments doivent être fournis tels que identifant, mot de passe, clef propriétaire, uri, oauth_url (flux 3).
La clef propriétaire sera insérée dans le header à la rubrique Authorization Basic, avec d'autres éléments plus classiques d'un header de type Content-Type et Accept.
Le payload sera constitué du grant_type=password complété de l'identifiant et du mot de passe, codé compatible http.
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).
oauth2-flow.png
OAuth 2.0 Flow
oauth2-flow.png (36.59 Kio) Consulté 1648 fois

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 ;) ) est disponible pour ceux qui veulent intégrer dans leur PLUGIN une authorisation de type OAuth2.0 authorization Basic et Owner Password Credentials avec un objet connecté ou un site.
Il est important de déclarer dans le script principal:
$username=xxxxxx;
$password=yyyyyy;
$ownerpassword='xcahzkjhdqsqqlqk12jkHAHDIZHDNXKANnsjhegzygbj263';
$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_client_password().
Code : Tout sélectionner
function sdk_OAuth2_client_password($host,$oauth_url,$username,$password,$ownerpassword) {
/*
Based on RFC 6749 see https://www.rfc-editor.org/rfc/rfc6749.txt for more details §4.3.  Owner Password Credentials Grant
host      : REQUIRED. Value is the servor url
username  : REQUIRED. Value is the resource owner username
password  : REQUIRED. Value is the resource owner password
grant_type: REQUIRED. Value MUST be set to "password".

Input parameters:
   $host           : servor uri
   $oauth_url      : OAuth url
   $username      : developper identification
   $password      : developper password
Output parameters:
   $response       : json string containing access_token, token_type
   $header_received: header received from the servor including ERROR code and description

POST /token HTTP/1.1
Host: server.example.com
Authorization: Basic <myownerpassword>
Content-Type: application/x-www-form-urlencoded
grant_type=password&username=<myusername>&password=<mypassword>


HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Cache-Control: no-store
Pragma: no-cache
{
  "access_token":"2YotnFZFEjr1zCsicMWpAA",
  "token_type":"example",
  "expires_in":3600,
  "refresh_token":"tGzv3JOkF0XG5Qx2TlKWIA",
  "example_parameter":"example_value"
}

*/

global  $header_received;

   $payload = http_build_query(array('grant_type'=>'password', 'username'=>$username, 'password'=>$password,));
   $header = array("Accept: application/json", "Authorization: Basic ".$ownerpassword, "Content-Type: application/x-www-form-urlencoded");
   $url = $host.

   $response   = httpQuery($url, 'POST', $payload, NULL, $header, FALSE, FALSE, &$header_received);

   return $response;
}

Vos commentaires sont la bienvenue pour améliorer cette boîte à outils.
Bonne semaine à toutes et tous.
dommarion
OpenWeather|Phases soleil|HeatzyV2|Concaténateur|HP Yamaha|SomfyV3|Epson|Seuils n étages|Baie 2 vantaux|Deezer|Intégrale|Authorization Digest|TV Philips|SmartThings|fonction PHP|Tuya Smartlife|CozyTouch2|mySMS
dommarion
 
Messages : 588
Inscription : 28 Déc 2020

Re: Fonction OAuth 2.0 Authorization Basic Owner Password Cr

Messagepar gabvoir » 25 Jan 2024 15:59

Salut,
Belle initiative, qui pourra s'avérer utile.
Typiquement le genre de fonction qui devrait être intégrer au sdk natif d'eedomus.
Merci !:
gabvoir
 
Messages : 182
Inscription : 24 Juin 2015


Retour vers Entraide programmation plugins

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 29 invité(s)