Gmail API - Oauth2/google:找不到凭据(Golang)

Posted

技术标签:

【中文标题】Gmail API - Oauth2/google:找不到凭据(Golang)【英文标题】:Gmail API - Oauth2/google: no credentials found (Golang) 【发布时间】:2021-10-02 04:02:04 【问题描述】:

​大家好, 想要为 Gmail API 做服务器端集成。基本需求是使用启用 Gmail API 我想读取我的 Gmail 收件箱以进行某些分析。

Golang 包 - “google.golang.org/api/gmail/v1”

根据文档,我已按照以下步骤操作。

    新注册的 Gmail

    添加了使用 GCP 服务的结算明细

    创建测试项目

    启用 Gmail API

    在其中创建了服务帐户和密钥。得到了 credentials.json 文件

    在后端,我使用 Golang 包来提取 Gmail 收件箱。

    成功集成后,我试图运行我的代码,但得到 以下错误

    "level":"error","msg":"Error while creating gmail service : oauth2/google: no credentials found","time":"2021-07-25T15:11:23+05:30"    

谁能帮我弄清楚缺少什么?

【问题讨论】:

在您的问题中输入您尝试运行的代码 要重现这一点,我需要注册 GCP,创建一个服务帐户,安装“golang 包”,不管是什么,并编写具有相同错误的代码。这超出了 Stack Overflow 的范围,所以我会投票关闭,唯一的问题是几个适用的关闭原因中的哪一个。 有多种方法可以验证您的客户端以访问 api。您需要添加与您选择的方法相关的代码。并相应地更新其他因素,以便可以对其进行调试。正如@amt 提到的,无法继续处理这些信息。 在此处添加您正在使用的代码。见minimal-reproducible-example 【参考方案1】:

我目前将 OAuth 与 YouTube 和设备流程 [1] 一起使用,所以这可能会有所帮助。首先,您需要像这样发出一次性请求:

data := url.Values
   "client_id": "something.apps.googleusercontent.com",
   "scope": "https://www.googleapis.com/auth/youtube",

res, err := http.PostForm("https://oauth2.googleapis.com/device/code", data)

你会得到这样的回应:

type OAuth struct 
   Device_Code string
   User_Code string
   Verification_URL string

您可以像这样对用户进行一次性提示:

1. Go to
https://www.google.com/device

2. Enter this code
HNDN-ZWBL

3. Sign in to your Google Account

然后,在用户登录后,您可以像这样进行交换请求:

data := url.Values
   "client_id": "something.apps.googleusercontent.com",
   "client_secret": "super secret",
   "device_code": "device code from above",
   "grant_type":  "urn:ietf:params:oauth:grant-type:device_code",

res, err := http.PostForm("https://oauth2.googleapis.com/token", data)

这将为您提供access_tokenrefresh_token,您可以将其保存在本地以供重复使用。除了“设备流”,还有“原生应用”流[2],但我发现前者是一个更简单的过程。

    https://developers.google.com/identity/sign-in/devices https://developers.google.com/identity/protocols/oauth2/native-app

【讨论】:

以上是关于Gmail API - Oauth2/google:找不到凭据(Golang)的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot + Spring Security + Spring OAuth2 + Google 登录

Rest,Spring 拥有 OAuth2 服务器 + OAuth2 提供商,如 Facebook、Google、Yahoo

Spring Boot + OAuth2 + Google Login - 如何实现注销

使用 Gmail API 从 Gmail 下载附件

在java中使用对象com.google.api.services.gmail.model.Message读取gmail消息正文?

Gmail现在支持安排电子邮件,如何使用gmail rest api工作,还是api支持此功能?