GNU/Linux >> Linux Esercitazione >  >> Ubuntu

Ubuntu One Oauth Accedi da Php?

Ho cercato su Internet cercando di trovare un semplice esempio che potesse indirizzarmi nella giusta direzione, ma senza fortuna, quindi ecco le mie domande:

Voglio accedere a Ubuntu One e sincronizzare (o quasi leggere) i file dalla mia pagina Web, tutto fatto con PHP. Le necessità per raggiungere i file sono tutte descritte in quella pagina:https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/

Sono in grado di completare la prima richiesta con:

$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 fa solo petizioni di curl di base. Nota che hai bisogno di un utente valido:pass ubuntu one account. Ottengo la risposta correttamente in json con "consumer_secret", "token", "consumer_key", "name", "token_secret". Anche la voce appare elencata nelle app concesse da Ubuntu One.

Ho installato la più nuova estensione php OAuth PCL e funziona bene. ma quando provo a:

    $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());

Vengo spostato alla pagina "Transazione OpenID in corso" in cui si passa quando si esegue un accesso Web manuale. Sto sicuramente sbagliando qualcosa. Ho provato a ottenere il secondo passaggio da https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/ con $oauth->fetch, $oauth->getAccessToken e $oauth->getRequestToken, stessa risposta su tutti con errore 403 :S

Stavo cercando di capire come funziona il payload, ma gli esempi principali sono scritti con python, usando "import ubuntuone.couch.auth as auth" che rende il token quasi automatico.

Mi piacerebbe ricevere alcuni suggerimenti. Grazie

Risposta accettata:

Credo che il problema fosse che il passaggio 2 del flusso di lavoro "crea un nuovo token", definito su https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/, non riusciva con un 503 per te perché il servizio era giù di un paio di punti questo fine settimana. Dovrai intrappolare questa situazione e affrontarla (un 503 indica che dovresti riprovare la richiesta in un secondo momento, come per HTTP standard).

Ho testato il seguente PHP (attenzione:non sono un hacker PHP, quindi potrebbe non essere il codice più idiomatico) e funziona bene per me. Passa attraverso tre passaggi:

  1. Crea un nuovo token in Ubuntu SSO (login.ubuntu.com) (documenti API)
  2. Parla a Ubuntu One di quel nuovo token (documenti API)
  3. Usa quel nuovo token per firmare una richiesta all'API dei file di Ubuntu One (documenti API)

Vedrai le singole parti commentate di seguito. Ricorda che questo richiede e ottiene un token nuovo di zecca; una volta che hai il token (dopo il passaggio 2), salvalo da qualche parte; non richiederne uno nuovo ogni volta.

<?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. Rimuovi i nomi utente dalla schermata di accesso - Ubuntu 11.10

  2. Aggiornamento da Ubuntu 13.10 a Ubuntu 14.04

  3. Aggiornamento da Ubuntu 13.04 a Ubuntu 13.10

  4. Come eseguire l'aggiornamento a Ubuntu 15.10 da Ubuntu 15.04

  5. Come installare PHP 7.2 su Ubuntu 16.04

Aggiornamento da Ubuntu 14.04 a Ubuntu 14.10

Come aggiornare da Ubuntu 16.10 a Ubuntu 17.04

Rimuovi la sessione GUEST dalla schermata di accesso di Ubuntu

Come aggiornare da Ubuntu 20.04 a Ubuntu 22.04

Ubuntu 21.04 Server aggiunge banner SSH al login

Come installare PHP 8.0 su Ubuntu 20.04 / 18.04