客户未经授权使用此方法Gmail API检索访问令牌

时间:2019-03-24 16:29:20

标签: gmail-api

正如许多其他人所写的那样,我也遇到了这个问题,我在尝试set new email signature via the API时遇到了这个问题

确切的API调用是:

sendAsConfiguration = {
        'signature': 'Test email signature'
    }
result = gmailService.users().settings().sendAs().patch(userId='xxx@domain.com',
            sendAsEmail="xxx@domain.com",
            body=sendAsConfiguration).execute()

确切的答复是:

google.auth.exceptions.RefreshError: ('unauthorized_client: Client is unauthorized to retrieve access tokens using this method, or client not authorized for any of the scopes requested.', '{\n  "error": "unauthorized_client",\n  "error_description": "Client is unauthorized to retrieve access tokens using this method, or client not authorized for any of the scopes requested."\n}')

我的情况如下:

  1. 我正在使用GCP Cloud Functions中的Python
  2. 我通过相同的代码库和设置来管理对G Suite目录管理员的请求
  3. 我在狂野委托下创建了一个服务帐户。而且我在代码和G Suite帐户中都添加了正确的作用域。
  4. 尝试使用gmail API时,此方法无效。
  5. 我创建了一个新项目,并部署了完全相同的代码(当然使用了新服务帐户的设置),并且一切正常。
  6. 我重复了在原始项目上创建服务帐户的所有步骤,但仍然没有用。

我需要它用于生产项目,而不是测试项目。

我已阅读以下问题和解答(以及它们的许多其他变体),但answer 1answer 2

无效

关于答案2,我不确定我是否理解这一点,因此,如果这是真正的解决方案,那么最好采取具体步骤。

我并没有添加代码本身,因为它可以正常工作(已经在另一个项目上进行了测试,并且可以正常工作)。请在下面查看服务帐户的设置

G Suite设置 G Suite settings 最初,我将两个合并范围都放在同一个服务帐户下,结果却相同。在上一次测试中,我尝试了每个仅具有一个作用域的服务帐户。结果相同

服务帐户设置 enter image description here

在此方面寻求帮助会很棒,

更新1

我没有OAuth凭据,请参见下图 Credentials

更新2

我已经比较了有工作的项目和没有工作的项目。我注意到的唯一区别是,在工作项目中没有API密钥。既然人们写了关于OAuth的文章,我想我可能会给它一个机会。但是由于这是生产环境,所以我不想删除它们,尤其是由于它是由Google自动生成的,因此我不知道它们在哪里使用。我认为它们并没有在任何地方使用,但我不确定。

我尝试向工作帐户中添加一个API密钥,但该密钥仍然有效,这给了我更大的动力,使生产设置保持不变。

更新3

我删除了API密钥,但没有帮助。

谢谢

2 个答案:

答案 0 :(得分:0)

我发现这是服务帐户的角色问题。

  1. 在开发人员控制台->项目-> IAM中,确保您的服务帐户在此处列出。
    • 如果不是,请单击“添加”并开始输入名称以添加它
  2. 对于角色,选择访问批准->访问批准批准

这使我可以查询任何域用户的日历事件列表。

答案 1 :(得分:0)

  

我通过狂野委托创建了一个服务帐户。而且我在代码和G Suite帐户中都添加了正确的作用域。

在G Suite管理员的“管理API客户端访问”页面上添加服务帐户及其作用域之前,必须启用“将域范围的权限委派给服务帐户”。否则,它将失败,并显示为“未授权客户端使用此方法检索访问令牌,或者未授权客户端使用任何请求的范围”。错误,需要删除API客户端并再次添加。

相关问题