Google API 服务帐号授权错误

Posted

技术标签:

【中文标题】Google API 服务帐号授权错误【英文标题】:Google API Service Account Authorization Error 【发布时间】:2017-06-13 16:50:56 【问题描述】:

我正在使用google-api-php-client 客户端通过服务帐户连接到 Google 云端硬盘。大多数情况下它都有效,但每隔一段时间(例如,如果我坐在这里一遍又一遍地刷新页面,它是每 5 到 10 次),我会收到带有消息 unauthorized_client: Client is unauthorized to retrieve access tokens using this methodGoogle_Service_Exception。仅当存在 $this->drive_service->files->listFiles() 代码时才会出现该错误。如果我直接使用服务帐户而不是使用setSubject() 模拟其他用户,则不会发生这种情况。

        $this->client = new Google_Client();
        $this->client->useApplicationDefaultCredentials();
        $this->client->addScope("https://www.googleapis.com/auth/drive");
        $this->client->setSubject('xxxx');
        $this->drive_service = new Google_Service_Drive($this->client);
        $files = $this->drive_service->files->listFiles();

有什么想法吗?

2017 年 2 月 21 日更新:该错误不再是间歇性的,它每次都会发生,所以我再也无法通过服务帐户连接到普通帐户。

2017 年 3 月 10 日更新:这似乎是用户的误解。服务帐户必须被授予“域范围的权限”才能模拟该域的用户——我没有这样做。我只是授权客户访问用户帐户,如here 所述。

【问题讨论】:

【参考方案1】:

我不知道为什么您的错误会定期发生,但我的理解是要冒充用户,您必须grant the service account access。

【讨论】:

【参考方案2】:

我在新创建被模拟的帐户时间歇性地看到此错误。从表面上看,在尝试创建服务之前添加 10 秒延迟可以解决问题。

【讨论】:

被模拟的用户帐户不是新创建的。

以上是关于Google API 服务帐号授权错误的主要内容,如果未能解决你的问题,请参考以下文章

Google 服务帐号:API 返回错误:TypeError: source.hasOwnProperty is not a function after a hour

Google API 服务帐号

如何获取 授权API key

Google Drive API、Oauth 和服务帐号

如何分别使用服务帐号和 API 密钥来使用 BigQuery?

GCP IAM REST API 服务帐号密钥问题