使用新的Google API控制台项目获取unauthorized_client,客户未经授权使用此方法检索访问令牌

时间:2017-05-31 14:04:09

标签: google-api google-oauth google-api-php-client

我创建了一个带有Web应用程序类型的Google API控制台项目和客户端ID。然后使用OAuth 2.0 Playground - Google Developers我授权使用我的客户端ID驱动,工作表和日历范围。

此外,G Suite中添加并授权了服务帐户客户端ID和范围。

我尝试使用以下示例列出驱动器中文件夹中的文件

的index.php

<?php
require_once 'vendor/autoload.php';
require_once 'vendor/google/apiclient/examples/templates/base.php';
$service = get_service_document();
$folderid='FOLDER_ID';


try {
   $children1 = $service->files->listFiles(array(
       'q' => "'$folderid' in parents "));
   $filearray1 = $children1;
}
catch(Exception $e){
   echo $e->getMessage();
}
print_r($children1);
exit;

function buildServiceDrive($userEmail,$service_id,$scope,$service_filename) {

   $client = new Google_Client();
   putenv("GOOGLE_APPLICATION_CREDENTIALS=".$service_filename);
   if ($credentials_file = checkServiceAccountCredentialsFile()) {
// set the location manually
       $client->setAuthConfig($credentials_file);
   }
   elseif (getenv('GOOGLE_APPLICATION_CREDENTIALS')) {
// use the application default credentials
       $client->useApplicationDefaultCredentials();
   }
   else {
       echo missingServiceAccountDetailsWarning();
       return;
   }
   $client->setApplicationName("DRIVE");
   $client->setScopes('https://www.googleapis.com/auth/drive');
   $client->setSubject($userEmail);
   return new Google_Service_Drive($client);
}
//COMMON FUNCTION TO CREATE CALENDAR ID
function get_service_document(){

   $userstamp='user@domain.com';
   $driveService =buildServiceDrive($userstamp,'','','project-id-451a5f6b12ce.json';
   return $driveService;
}

但是我遇到了这个问题

{
 "error": "unauthorized_client",
 "error_description": "Client is unauthorized to retrieve access tokens using this method."
}

我发现此问题只是新创建的Google API控制台项目

请帮我解决这个问题。 提前致谢

2 个答案:

答案 0 :(得分:3)

使用服务帐户运行API调用但未正确完成域范围的委派(DWD)或管理控制台中的授权尚未传播时,这是一个常见错误。

This article详细解释了DWD的过程。如果您已经这样做了,请等待24小时,它应该可以工作。如果之后它不起作用,那么它必须是别的东西,但就我现在所说,DWD过程就是问题所在。

请注意:DWD仅适用于G Suite客户。如果您使用的是消费者gmail.com帐户,则无法执行此操作。相反,您必须通过用户同意OAuth流程。

答案 1 :(得分:0)

如果API客户端仅具有写权限,并且在范围内指定仅需要只读访问权限,则也会发生此错误。

{
   "error": "unauthorized_client",
   "error_description": "Client is unauthorized to retrieve access tokens using this method."
}