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

问题描述 投票:0回答:1

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

确切的API调用是:

sendAsConfiguration = {
        'signature': 'Test email signature'
    }
result = gmailService.users().settings().sendAs().patch(userId='[email protected]',
            sendAsEmail="[email protected]",
            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密钥,但没有帮助。

谢谢

gmail-api
1个回答
0
投票

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

  1. 在您的开发者控制台 - >项目 - > IAM中,确保您的服务帐户列在那里。 如果不是,请单击“添加”并开始键入名称以添加它
  2. 对于Role,选择Access Approval - > Access Approval Approver

这允许我查询任何域用户的日历事件列表。

© www.soinside.com 2019 - 2024. All rights reserved.