GNU/Linux >> LINUX-Kenntnisse >  >> Ubuntu

Ubuntu One OAuth-Anmeldung von Php?

Ich habe das ganze Internet durchsucht, um ein einfaches Beispiel zu finden, das mich in die richtige Richtung weisen könnte, aber kein Glück, also kommen hier meine Fragen:

Ich möchte mich bei Ubuntu One anmelden und Dateien von meiner Webseite synchronisieren (oder fast lesen), alles mit PHP. Die Anforderungen zum Erreichen von Dateien sind alle auf dieser Seite beschrieben:https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/

Ich kann die erste Anfrage abschließen mit:

$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 erstellt nur einfache Curl-Petitionen. Beachten Sie, dass Sie ein gültiges user:pass Ubuntu One-Konto benötigen. Ich bekomme die Antwort korrekt in json mit „consumer_secret“, „token“, „consumer_key“, „name“, „token_secret“. Sogar der Eintrag wird in den gewährten Apps von Ubuntu One aufgelistet.

Ich habe die neueste OAuth-PCL-PHP-Erweiterung installiert und sie funktioniert gut. aber wenn ich versuche:

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

Ich werde auf die Seite „OpenID-Transaktion in Bearbeitung“ weitergeleitet, auf der Sie bei einer manuellen Webanmeldung vorbeikommen. Irgendwas mache ich definitiv falsch. Ich habe versucht, den zweiten Schritt von https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/ mit $oauth->fetch, $oauth->getAccessToken und $oauth->getRequestToken zu bekommen, gleiche Antwort auf alle mit 403-Fehler :S

Ich habe versucht herauszufinden, wie die Payload funktioniert, aber die Hauptbeispiele sind mit Python geschrieben, wobei „import ubuntuone.couch.auth as auth“ verwendet wird, wodurch das Token-Zeug fast automatisch wird.

Ich freue mich über ein paar Tipps. Danke

Akzeptierte Antwort:

Ich glaube, das Problem war, dass Schritt 2 des Workflows „Neues Token erstellen“, definiert auf https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/, mit einem 503 für Sie fehlschlug, weil der Dienst war dieses Wochenende um ein paar Punkte nach unten. Sie müssen diese Situation abfangen und damit umgehen (ein 503 zeigt an, dass Sie die Anfrage später wiederholen sollten, gemäß Standard-HTTP).

Ich habe das folgende PHP getestet (Vorsicht:Ich bin kein PHP-Hacker, daher ist es möglicherweise nicht der idiomatischste Code) und es funktioniert gut für mich. Es durchläuft drei Schritte:

  1. Erstellen Sie ein neues Token in Ubuntu SSO (login.ubuntu.com) (API-Dokumentation)
  2. Teilen Sie Ubuntu One dieses neue Token mit (API-Dokumentation)
  3. Verwenden Sie dieses neue Token, um eine Anfrage an die Ubuntu One-API für Dateien zu signieren (API-Dokumentation)

Sie sehen die einzelnen Teile unten kommentiert. Denken Sie daran, dass dies ein brandneues Token anfordert und erhält; Sobald Sie das Token haben (nach Schritt 2), speichern Sie es irgendwo; fordere nicht jedes Mal eine neue an.

<?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. Entfernen Sie die Benutzernamen vom Anmeldebildschirm – Ubuntu 11.10

  2. Upgrade von Ubuntu 13.10 auf Ubuntu 14.04

  3. Aktualisieren Sie von Ubuntu 13.04 auf Ubuntu 13.10

  4. So aktualisieren Sie von Ubuntu 15.04 auf Ubuntu 15.10

  5. Ich kann mich vom Windows-Client nicht bei Ubuntu One anmelden?

Upgrade von Ubuntu 14.04 auf Ubuntu 14.10

So aktualisieren Sie von Ubuntu 16.10 auf Ubuntu 17.04

GAST-Sitzung vom Ubuntu-Anmeldebildschirm entfernen

So aktualisieren Sie von Ubuntu 20.04 auf Ubuntu 22.04

Ubuntu 21.04 Server fügt SSH-Banner bei der Anmeldung hinzu

So installieren Sie PHP 8.0 unter Ubuntu 20.04 / 18.04