尝试从服务(PHP)访问Google云端硬盘时授权失败

时间:2015-04-22 14:36:24

标签: php oauth-2.0 google-drive-api

我需要从Google云端硬盘上的公开标记文件夹中获取文件列表。

即使文件夹被标记为公开,Drive API仍然需要我的代码才能发送经过身份验证的请求 - 足够公平。

但是,我没有被正确授权。相反,我收到一个错误:“刷新OAuth2令牌时出错,消息:'{”error“:”unauthorized_client“}',我看不出原因。

<?php
require_once 'google-api-php-client/src/Google/autoload.php';
require_once 'google-api-php-client/src/Google/Client.php';
require_once 'google-api-php-client/src/Google/Service/Drive.php';
require_once 'google-api-php-client/src/Google/Service/Oauth2.php';

// session_start();

define('DRIVE_SCOPE', 'https://www.googleapis.com/auth/drive');
define('SERVICE_ACCOUNT_EMAIL', 'blablablablabla-blablablabla51@developer.gserviceaccount.com');
define('SERVICE_ACCOUNT_PKCS12_FILE_PATH', 'Bla-blabla29db83.p12');

/**
 * Build and returns a Drive service object authorized with the service accounts
 * that acts on behalf of the given user.
 *
 * @param userEmail The email of the user.
 * @return Google_Service_Drive service object.
 */
function buildService($userEmail) {
  $key = file_get_contents(SERVICE_ACCOUNT_PKCS12_FILE_PATH);
  $auth = new Google_Auth_AssertionCredentials(
      SERVICE_ACCOUNT_EMAIL,
      array(DRIVE_SCOPE),
      $key);
  $auth->sub = $userEmail;
  $client = new Google_Client();
  $client->setAssertionCredentials($auth);
  // This fails:
  if ($client->getAuth()->isAccessTokenExpired()) {
    $client->getAuth()->refreshTokenWithAssertion();
  }
  return new Google_Service_Drive($client);
}

/**
 * Print files belonging to a folder.
 *
 * @param Google_Service_Drive $service Drive API service instance.
 * @param String $folderId ID of the folder to print files from.
 */
function printFilesInFolder($service, $folderId) {
  // Omitted code
}

$service = buildService('blablabla@gmail.com');
printFilesInFolder($service, 'blablablablablablablabla');
?>

正确输入了服务电子邮件帐户和pkcs12文件。

我在想$ userEmail地址。在某个地方我应该在服务和地址之间建立关系吗?目前我正在使用拥有该项目的邮件地址,并设置了正在使用的OAuth2证书。

这使用最新的Drive API。我发现了其他问题和解释,但它们通常依赖于过时的Documents API。

我正在尝试从命令行运行代码,而不是从网页运行代码。

0 个答案:

没有答案