GNU/Linux >> Znalost Linux >  >> Ubuntu

Přihlášení Ubuntu One Oauth z PHP?

Prohledal jsem celý internet a snažil jsem se najít jednoduchý příklad, který by mě mohl nasměrovat správným směrem, ale bez úspěchu, takže zde přichází mé otázky:

Chci se přihlásit do Ubuntu One a synchronizovat (nebo téměř číst) soubory z mé webové stránky, vše provedeno pomocí PHP. Potřeby pro přístup k souborům jsou popsány na této stránce:https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/

První požadavek jsem schopen dokončit pomocí:

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

Dobře, curlPetition vytváří pouze základní curl petice. Všimněte si, že potřebujete platný účet user:pass ubuntu one. Odpověď dostávám správně v json s „consumer_secret“ , „token“ , „consumer_key“ , „name“ , „token_secret“. Dokonce i položka se objeví v seznamu v udělených aplikacích ubuntu.

Nainstaloval jsem nejnovější rozšíření OAuth PCL php a funguje dobře. ale když se o to pokusím:

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

Dostávám se na stránku „Probíhá transakce OpenID“, kterou procházíte při ručním přihlášení na web. určitě dělám něco špatně. Pokusil jsem se získat druhý krok z https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/ pomocí $oauth->fetch, $oauth->getAccessToken a $oauth->getRequestToken, stejná odpověď na všech s Chyba 403 :S

Snažil jsem se přijít na to, jak funguje užitečné zatížení, ale hlavní příklady jsou napsány pomocí pythonu pomocí „import ubuntuone.couch.auth as auth“, díky kterému jsou věci s tokeny téměř automatické.

Rád získám nějaké rady. Díky

Přijatá odpověď:

Domnívám se, že problém byl v tom, že krok 2 pracovního postupu „vytvoření nového tokenu“, definovaného na https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/, selhal s 503 pro vás, protože služba byla tento víkend klesl o několik bodů. Budete muset tuto situaci zachytit a vypořádat se s ní (503 znamená, že byste měli požadavek zopakovat později, podle standardního HTTP).

Testoval jsem níže uvedený PHP (pozor:nejsem PHP hacker, takže to nemusí být ten nejidiomatičtější kód) a funguje mi to dobře. Prochází třemi kroky:

  1. Vytvořte nový token v Ubuntu SSO (login.ubuntu.com) (dokumenty API)
  2. Řekněte Ubuntu One o tomto novém tokenu (dokumenty API)
  3. Použijte tento nový token k podepsání požadavku na Ubuntu One files API (dokumenty API)

Jednotlivé části uvidíte komentované níže. Pamatujte, že to vyžaduje a dostává zcela nový token; jakmile budete mít token (po kroku 2), uložte ho někam; nepožadujte pokaždé nový.

<?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. Upgradujte z Ubuntu 13.10 na Ubuntu 14.04

  2. Upgradujte z Ubuntu 13.04 na Ubuntu 13.10

  3. Jak nainstalovat PHP 8.0 na Ubuntu 20.04 / Ubuntu 18.04

  1. Odebrání uživatelských jmen z přihlašovací obrazovky – Ubuntu 11.10

  2. Jak upgradovat na Ubuntu 15.10 z Ubuntu 15.04

  3. Jak nainstalovat PHP 7.2 na Ubuntu 16.04

  1. Jak upgradovat z Ubuntu 16.04 na Ubuntu 18.04

  2. Upgradovat na konkrétní PHP 7.1/7.2 z PHP 7.0 v Ubuntu 16.04?

  3. Nemohu se přihlásit k Ubuntu One z klienta Windows?