GNU/Linux >> Belajar Linux >  >> Ubuntu

Login Ubuntu One Oauth Dari Php?

Saya telah mencari di seluruh internet mencoba menemukan contoh sederhana yang dapat mengarahkan saya ke arah yang benar, tetapi tidak berhasil, jadi inilah pertanyaan saya:

Saya ingin masuk ke Ubuntu One dan menyinkronkan (atau hampir membaca) file dari halaman web saya, semuanya selesai dengan PHP. Semua kebutuhan untuk menjangkau file dijelaskan di halaman itu:https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/

Saya dapat menyelesaikan permintaan pertama dengan:

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

Oke, curlPetition hanya membuat petisi curl dasar. Perhatikan bahwa Anda memerlukan pengguna yang valid:lulus satu akun ubuntu. Saya mendapatkan respons dengan benar di json dengan “consumer_secret” , “token” , “consumer_key” , “name” , “token_secret”. Bahkan entri tersebut muncul dalam daftar aplikasi yang diberikan oleh ubuntu one.

Saya telah menginstal ekstensi php OAuth PCL terbaru dan berfungsi dengan baik. tetapi ketika saya mencoba untuk:

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

Saya dipindahkan ke halaman “Transaksi OpenID sedang berlangsung” yang Anda lewati saat melakukan login web manual. Saya pasti melakukan sesuatu yang salah. Saya mencoba mendapatkan langkah kedua dari https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/ dengan $oauth->fetch, $oauth->getAccessToken dan $oauth->getRequestToken, respons yang sama pada semua dengan 403 kesalahan :S

Saya mencoba mencari cara kerja payload tetapi contoh utama ditulis dengan python, menggunakan “import ubuntuone.couch.auth as auth” yang membuat token menjadi hampir otomatis.

Saya akan senang untuk mendapatkan beberapa petunjuk. Terima kasih

Jawaban yang Diterima:

Saya yakin masalahnya adalah langkah 2 dari alur kerja "buat token baru", yang ditentukan di https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/, gagal dengan 503 untuk Anda karena layanannya turun di beberapa poin akhir pekan ini. Anda harus menjebak situasi ini dan menanganinya (angka 503 menunjukkan bahwa Anda harus mencoba lagi permintaan nanti, sesuai HTTP standar).

Saya telah menguji PHP di bawah ini (hati-hati:Saya bukan peretas PHP, jadi ini mungkin bukan kode yang paling idiomatis) dan berfungsi dengan baik untuk saya. Ini melalui tiga langkah:

  1. Buat token baru di Ubuntu SSO (login.ubuntu.com) (API docs)
  2. Beri tahu Ubuntu One tentang token baru itu (dokumen API)
  3. Gunakan token baru itu untuk menandatangani permintaan ke API file Ubuntu One (API docs)

Anda akan melihat masing-masing bagian dikomentari di bawah. Ingatlah bahwa ini meminta dan mendapatkan token baru; setelah Anda memiliki token (setelah langkah 2), simpan di suatu tempat; jangan meminta yang baru setiap saat.

<?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. Hapus Nama Pengguna dari Layar Masuk – Ubuntu 11.10

  2. Cara Menginstal PHP 8.0 di Ubuntu 20.04 / Ubuntu 18.04

  3. Cara Meningkatkan ke Ubuntu 15.10 dari Ubuntu 15.04

  1. Tingkatkan Dari Ubuntu 13.10 ke Ubuntu 14.04

  2. Tingkatkan dari Ubuntu 13.04 ke Ubuntu 13.10

  3. Tingkatkan Ke Php 7.1/7.2 Tertentu Dari Php 7.0 Di Ubuntu 16.04?

  1. Cara Meningkatkan Dari Ubuntu 16.04 ke Ubuntu 18.04

  2. Cara Menginstal PHP 7.2 di Ubuntu 16.04

  3. Saya Tidak Dapat Masuk Ke Ubuntu One Dari Klien Windows?