GNU/Linux >> Tutoriels Linux >  >> Ubuntu

Connexion Ubuntu One Oauth à partir de Php?

J'ai cherché sur tout Internet en essayant de trouver un exemple simple qui pourrait m'orienter dans la bonne direction, mais pas de chance, alors voici mes questions :

Je veux me connecter à Ubuntu One et synchroniser (ou presque lire) les fichiers de ma page Web, le tout avec PHP. Les besoins pour accéder aux fichiers sont tous décrits dans cette page :https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/

Je suis capable de compléter la première demande avec :

$url = 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%[email protected]%20try1';
$data = curlPetition(array('URL'=>$url,'USERPWD'=>'user:pass'));
$ar = fopen('uOne','w');fwrite($ar,$data['responseBody']);fclose($ar);
$tokenA = json_decode($data['responseBody'],1);

Ok, curlPetition ne fait que des requêtes curl de base. Notez que vous avez besoin d'un compte user:pass ubuntu valide. J'obtiens la réponse correctement dans json avec "consumer_secret" , "token" , "consumer_key" , "name" , "token_secret". Même l'entrée apparaît répertoriée dans les applications accordées par Ubuntu.

J'ai installé la toute nouvelle extension php OAuth PCL et elle fonctionne bien. mais quand j'essaie de :

    $api_url = 'https://one.ubuntu.com/api/file_storage/v1/';
    $conskey = $tokenA['consumer_key'];
    $conssec = $tokenA['consumer_secret'];
    $token = $tokenA['token'];
    $secret = $tokenA['token_secret'];
    $oauth = new OAuth($conskey,$conssec,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
    $oauth->enableDebug();
    $oauth->enableSSLChecks();
    $oauth->setToken($token,$secret);
    $oauth->fetch($api_url.'~/Ubuntu%20One/');
    print_r($oauth->getLastResponse());

Je suis déplacé vers la page "Transaction OpenID en cours" où vous passez lors d'une connexion Web manuelle. Je fais définitivement quelque chose de mal. J'ai essayé d'obtenir la deuxième étape de https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/ avec $oauth->fetch, $oauth->getAccessToken et $oauth->getRequestToken, même réponse sur tous avec Erreur 403 :S

J'essayais de comprendre comment fonctionne la charge utile, mais les principaux exemples sont écrits avec python, en utilisant "import ubuntuone.couch.auth as auth" qui rend le jeton presque automatique.

J'aimerai avoir des indices. Merci

Réponse acceptée :

Je crois que le problème était que l'étape 2 du flux de travail "créer un nouveau jeton", défini sur https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/, échouait avec un 503 pour vous parce que le service était vers le bas à quelques points ce week-end. Vous devrez piéger cette situation et y faire face (un 503 indique que vous devez réessayer la requête plus tard, conformément au protocole HTTP standard).

J'ai testé le PHP ci-dessous (attention :je ne suis pas un hacker PHP, donc ce n'est peut-être pas le code le plus idiomatique) et cela fonctionne bien pour moi. Il passe par trois étapes :

  1. Créer un nouveau jeton dans Ubuntu SSO (login.ubuntu.com) (docs API)
  2. Parlez à Ubuntu One de ce nouveau jeton (documents API)
  3. Utilisez ce nouveau jeton pour signer une demande à l'API de fichiers Ubuntu One (docs API)

Vous verrez les parties individuelles commentées ci-dessous. N'oubliez pas que cela demande et obtient un tout nouveau jeton; une fois que vous avez le jeton (après l'étape 2), enregistrez-le quelque part ; n'en demandez pas un nouveau à chaque fois.

<?php
function curlPetition($arr){
    $curl = curl_init($arr['URL']);
    if($arr['USERPWD']){curl_setopt($curl, CURLOPT_USERPWD, $arr['USERPWD']);}  
    curl_setopt($curl,CURLOPT_SSL_VERIFYPEER,FALSE);
    curl_setopt($curl,CURLOPT_SSL_VERIFYHOST,2);
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
    $out = curl_exec($curl);
    curl_close($curl);
    $data['responseBody'] = $out;
    return $data;
}

/* Define username and password details */
$email_address = '[email protected]';
$password = 'MY PASSWORD';

/* Step 1: Get a new OAuth token from Ubuntu Single-Sign-On */
$url = 'https://login.ubuntu.com/api/1.0/authentications?ws.op=authenticate&token_name=Ubuntu%20One%[email protected]%20try1';
$data = curlPetition(array('URL'=>$url,'USERPWD'=> $email_address.':'.$password));
$tokenA = json_decode($data['responseBody'],1);

/* Set up that new token for use in OAuth requests */
$conskey = $tokenA['consumer_key'];
$conssec = $tokenA['consumer_secret'];
$token = $tokenA['token'];
$secret = $tokenA['token_secret'];
$oauth = new OAuth($conskey,$conssec,OAUTH_SIG_METHOD_HMACSHA1,OAUTH_AUTH_TYPE_URI);
$oauth->enableDebug();
$oauth->enableSSLChecks();
$oauth->setToken($token,$secret);

/* Step 2: tell Ubuntu One about the new token (signed with the token itself) */
$tell_u1_about_token_url = 'https://one.ubuntu.com/oauth/sso-finished-so-get-tokens/' . $email_address;
$oauth->fetch($tell_u1_about_token_url);
print_r($oauth->getLastResponse());

/* Step 3: use the token to make a request to the Files API */
$api_url = 'https://one.ubuntu.com/api/file_storage/v1/';
$oauth->fetch($api_url.'~/Ubuntu%20One/');
print_r($oauth->getLastResponse());
?>

Ubuntu
  1. Supprimer les noms d'utilisateur de l'écran de connexion - Ubuntu 11.10

  2. Mise à niveau d'Ubuntu 13.10 vers Ubuntu 14.04

  3. Mise à niveau d'Ubuntu 13.04 vers Ubuntu 13.10

  4. Comment mettre à niveau vers Ubuntu 15.10 à partir d'Ubuntu 15.04

  5. Comment installer PHP 7.2 sur Ubuntu 16.04

Mise à niveau d'Ubuntu 14.04 vers Ubuntu 14.10

Comment mettre à niveau d'Ubuntu 16.10 vers Ubuntu 17.04

Supprimer la session GUEST de l'écran de connexion Ubuntu

Comment mettre à niveau d'Ubuntu 20.04 vers Ubuntu 22.04

Ubuntu 21.04 Server ajoute une bannière SSH à la connexion

Comment installer PHP 8.0 sur Ubuntu 20.04 / 18.04