Автоматический вход на сервер Dropbox

Укороченная версия: Есть ли способ, которым мое PHP-приложение может войти в определенную учетную запись Dropbox, выполнив полный процесс OAuth 2.0 на стороне сервера?

Длинная версия: Рассмотрим следующие шаги:

  • Перейдите в Google Chrome на страницу входа в мое приложение Dropbox: https://www.dropbox.com/1/oauth2/authorize?locale=&response_type=code&client_id=[APP_CLIENT_ID]
  • Откройте Chrome Dev Tools, перейдите в консоль
  • Выполните следующий вызов jQuery:

    jQuery.ajax({
    method: 'POST',
    url: 'https://www.dropbox.com/ajax_login',
    data: {
    login_email: '[DROPBOX_LOGIN]',
    login_password: '[DROPBOX_PASSWORD]',
    require_role: ''
    },
    });
    

Теперь этот браузер вошел в Dropbox, что можно увидеть, обновив окно браузера.

Как я могу реализовать ту же процедуру в PHP, используя cURL или file_get_contents?

Я попробовал это так:

<?php
require_once "config.php";

use \Dropbox as dbx;

// init Dropbox login process
$webAuth = new dbx\WebAuthNoRedirect($appInfo, $clientId);
$authorizeUrl = $webAuth->start();

// load Dropbox login website
$ckfile = tempnam ("/tmp", "CURLCOOKIE");
$ch = curl_init($authorizeUrl);
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec ($ch);

$data = array('login_email' => '[DROPBOX_LOGIN]', 'login_password' => '[DROPBOX_PASSWORD]', 'require_role' => '');

$loginUrl = 'https://www.dropbox.com/ajax_login';
$ch = curl_init($loginUrl);
curl_setopt($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt($ch, CURLOPT_COOKIEFILE, $ckfile);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/x-www-form-urlencoded',
'Connection: Keep-Alive'
));

$result = curl_exec ($ch);
if ($result === FALSE)
$result = curl_error($ch) . ' ' . curl_errno($ch);

Но я всегда получаю 403 Запрещено.

Что я делаю неправильно?

Кстати, у меня есть законный вариант использования для этого. Я знаю, что Dropbox использует OAuth 2.0 для предотвращения перехода пароля пользователя на мой сервер. Но учетные данные, которые используются здесь, не от конечного пользователя.

0

Решение

Просто завершите поток OAuth один раз для целевой учетной записи и сохраните токен доступа. Затем вы можете использовать этот токен доступа на неопределенный срок.

(Если токен доступа предназначен для учетной записи разработчика, которой принадлежит приложение, вы можете вообще пропустить поток OAuth и просто нажать кнопку «Создать» в консоли приложения, чтобы получить токен доступа для своей собственной учетной записи.)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]