GNU/Linux >> Tutoriales Linux >  >> Ubuntu

¿Ubuntu One Oauth iniciar sesión desde Php?

He buscado en todo el Internet tratando de encontrar un ejemplo simple que pueda orientarme en la dirección correcta, pero no tuve suerte, así que aquí vienen mis preguntas:

Quiero iniciar sesión en Ubuntu One y sincronizar (o casi leer) archivos de mi página web, todo hecho con PHP. Las necesidades para acceder a los archivos se describen todas en esa página:https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/

Puedo completar la primera solicitud 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 solo hace peticiones curl básicas. Tenga en cuenta que necesita un usuario válido:pase una cuenta de ubuntu. Recibo la respuesta correctamente en json con "consumer_secret", "token", "consumer_key", "name", "token_secret". Incluso la entrada aparece en la lista de las aplicaciones otorgadas de ubuntu.

He instalado la extensión php OAuth PCL más nueva y funciona bien. pero cuando intento:

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

Me muevo a la página "Transacción de OpenID en curso" donde pasa cuando realiza un inicio de sesión web manual. Definitivamente estoy haciendo algo mal. Traté de obtener el segundo paso de https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/ con $oauth->fetch, $oauth->getAccessToken y $oauth->getRequestToken, la misma respuesta en todos con error 403 :S

Estaba tratando de averiguar cómo funciona la carga útil, pero los ejemplos principales están escritos con python, usando "import ubuntuone.couch.auth as auth" que hace que el token sea casi automático.

Me encantaría obtener algunas pistas. Gracias

Respuesta aceptada:

Creo que el problema fue que el paso 2 del flujo de trabajo "crear un nuevo token", definido en https://one.ubuntu.com/developer/account_admin/issue_tokens/cloud/, estaba fallando con un 503 porque el servicio era abajo en un par de puntos este fin de semana. Deberá atrapar esta situación y solucionarla (un 503 indica que debe volver a intentar la solicitud más tarde, según HTTP estándar).

Probé el siguiente PHP (cuidado:no soy un hacker de PHP, por lo que podría no ser el código más idiomático) y funciona bien para mí. Pasa por tres pasos:

  1. Cree un nuevo token en Ubuntu SSO (login.ubuntu.com) (documentos API)
  2. Cuéntale a Ubuntu One sobre ese nuevo token (documentos API)
  3. Utilice ese nuevo token para firmar una solicitud a la API de archivos de Ubuntu One (documentos API)

Verá las partes individuales comentadas a continuación. Recuerde que esto solicita y obtiene un token nuevo; una vez que tenga el token (después del paso 2), guárdelo en algún lugar; no solicite uno nuevo cada vez.

<?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. Eliminar los nombres de usuario de la pantalla de inicio de sesión – Ubuntu 11.10

  2. Actualizar de Ubuntu 13.10 a Ubuntu 14.04

  3. Cómo instalar PHP 8.0 en Ubuntu 20.04 / Ubuntu 18.04

  4. Cómo actualizar a Ubuntu 15.10 desde Ubuntu 15.04

  5. ¿Actualizar al Php 7.1/7.2 específico desde Php 7.0 en Ubuntu 16.04?

Actualizar de Ubuntu 14.04 a Ubuntu 14.10

Cómo actualizar de Ubuntu 16.10 a Ubuntu 17.04

Eliminar la sesión INVITADA de la pantalla de inicio de sesión de Ubuntu

Cómo actualizar de Ubuntu 20.04 a Ubuntu 22.04

El servidor Ubuntu 21.04 agrega el banner SSH al iniciar sesión

Cómo instalar PHP 8.0 en Ubuntu 20.04/18.04