2017-03-09 202 views
1

我们正在努力建设一个服务导出谷歌在我们的gsuite域驱动文件。谷歌的API的PHP客户“错误”:“unauthorized_client”

我们正在与https://github.com/google/google-api-php-client

工作我们做了一个服务用户,下载并保存用户凭据,并授予域范围,对服务的访问用户。

中包含最简单的例子(如在每个文档,我发现):

putenv('GOOGLE_APPLICATION_CREDENTIALS='/service-account-credentials.json'); 

$client = new \Google_Client(); 
$client->setAuthConfig('service-account-credentials.json'); 

$client->setScopes('https://www.googleapis.com/auth/drive.file'); 

$client->useApplicationDefaultCredentials(); 
$client->setSubject('[email protected]'); 

$service = new \Google_Service_Drive($client); 

$service->files->listFiles(); 

只要我们包括$client->setSubject('[email protected]');它丢弃以下错误行:

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

有没有人一个想法,或者可以共享此问题的代码示例。这是一个真正阻滞剂对我们和现在为什么这个错误出现

+0

可能只是一个错字复制在这里也许,但你的第一和第三行均缺少引号让你的琴弦都搞砸了。 – Pacio

+0

THX,但这只是错别字这里计算器 – vanBrunneren

+0

您可以使用此[主题]参见(http://stackoverflow.com/questions/42067338/client-is-unauthorized-to-retrieve-access-tokens-using-this -方法)。你的错误意味着你的验证有问题。请仔细检查您是否[授予服务帐户访问权限](https://developers.google.com/api-client-library/php/auth/service-accounts#delegatingauthority)。您创建的服务帐户需要被授予对您想访问的用户数据的访问权限。 – abielita

回答

1

我终于我没有任何想法

后一对夫妇改掉的我意识到,我委托给了错误的域范围内的访问客户ID。我一直认为这应该与我在脚本中使用的“client_email”相同。但是真的(真的,真的)非常重要,这就是“client_id”(正如文档中提到的那样)。这不是电子邮件或字符串,它只是为服务帐户创建密钥时获得的简单号码。

+0

不知道我在追随。您将域范围访问权限分配给服务帐户,而不是特定的客户端ID(尽管服务帐户具有客户端ID)。您是否创建了多个服务帐户并将DwD分配给错误的帐户?如果可能的话包括代码 – sboss

+0

但是如果你把client_email放到那里,一旦你点击“授权”它就会用客户端ID来代替那个看起来很客气的电子邮件。我非常嫉妒你有这个工作,因为我仍然在努力。 – user3505901