Je vous propose une fonction pour effectuer le OAuth 2.0 authorization Basic et Owner Password Credentials (flux 3 et 4).
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).
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