【发布时间】:2019-08-14 23:54:56
【问题描述】:
正如许多其他人所写,我也遇到了这个问题,我在尝试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}')
我的场景如下:
- 我正在使用来自 GCP Cloud Functions 的 Python
- 我通过相同的代码库和设置管理对 G Suite 目录管理员的请求
- 我创建了一个带有野委托的服务帐户。我在代码和 G Suite 帐户中都添加了正确的范围。
- 尝试使用 gmail API 时,它不起作用。
- 我创建了一个新项目,并部署了完全相同的代码(当然还有新服务帐户的设置)并且一切正常。
- 我重复了在原始项目中创建服务帐户的所有步骤,但仍然无法正常工作。
我需要它在生产项目中工作,而不是测试项目。
我已阅读以下问题和答案(以及它们的许多其他变体),但没有任何效果answer 1、answer 2
关于答案 2,我不确定我是否理解这个,所以如果这是真正的解决方案,那么获得具体步骤会很棒。
我没有添加代码本身,因为它可以肯定地工作(在不同的项目上进行了测试,并且有效)。请参阅下面的服务帐户设置
G Suite 设置 一开始我在同一个服务帐户下拥有两个范围,我得到了相同的结果。在上次测试中,我尝试了每个只有一个范围的服务帐户。结果一样
在这方面能得到帮助会很棒,
更新 1
更新 2
我比较了成功的项目和失败的项目。我注意到的唯一区别是,在工作项目中没有 API 密钥。由于人们写过关于 OAuth 的文章,我想我可能会给它一个机会。但由于这是一个生产环境,我不想删除它们,特别是因为它是由 Google 自动生成的,我不知道它们在哪里使用。我认为它们没有在任何地方使用,但我不确定。
我尝试向工作帐户添加一个 API 密钥,但它仍然有效,这给了我更多动力,让生产设置保持不变。
更新 3
我已删除 API 密钥,但没有帮助。
谢谢
【问题讨论】:
-
来自answer 2,据说该解决方案可能会删除不属于任何服务帐户的凭据,这导致this github post,“我通过删除所有其他类型解决了我的问题相关应用的凭据(没有 oauth,只有服务帐户)”。
-
感谢@MαπμQμαπkγVπ.0。我仍然很困惑,据我所知我没有 OAuth 密钥。请看我附上的截图。我错过了什么吗?
标签: gmail-api