Go 如何使用谷歌api库oauth2?我有id令牌和访问令牌

Go 如何使用谷歌api库oauth2?我有id令牌和访问令牌,go,google-api,google-oauth,gmail-api,google-signin,Go,Google Api,Google Oauth,Gmail Api,Google Signin,如果我从前端对用户进行了身份验证,我如何授权访问后端(使用go google Library)?前端身份验证,我有access\u-token或id\u-token 有没有办法将id\u令牌转换为访问令牌 有没有办法使用id\u令牌运行calendar.NewService 有没有办法使用access\u token运行calendar.NewService 我的设置 在扩展中,我完成了两项工作: 从GCP creds oauth2“chrome应用程序”中,我可以获得“访问令牌” 从GC

如果我从前端对用户进行了身份验证,我如何授权访问后端(使用go google Library)?前端身份验证,我有
access\u-token
id\u-token

  • 有没有办法将
    id\u令牌
    转换为
    访问令牌
  • 有没有办法使用
    id\u令牌
    运行
    calendar.NewService
  • 有没有办法使用
    access\u token
    运行
    calendar.NewService
我的设置 在扩展中,我完成了两项工作:

  • 从GCP creds oauth2“chrome应用程序”中,我可以获得“访问令牌”
  • 从GCP creds oauth2“web app”,我可以获得“id令牌”
在后端,使用go google api库

我不知道如何使用我的
id\u令牌
access\u令牌
来使用这个库。到目前为止,我可以使用access_令牌执行curl请求,但它不使用这个库。这个谷歌图书馆有办法吗

尝试
  • 我在书中读到,只要你在同一个项目中指向同一个客户ID,你就可以继续。但我不断得到,
    令牌过期或找不到
  • 我听说id_令牌就是jwt。所以我试过了,但是我不能得到正确的类型,所以我甚至不能运行它
  • 已尝试使用oauth2 key.json

“代码”不重要,因为我不想通过浏览器链接验证用户。此时,用户应该假定已经从前端进行了身份验证。但是这也不行。

很抱歉,文档中没有示例。是的,我试过了,最后得到了

身份证没用

在访问令牌之前,我有一个身份验证码。我希望在他们的文档中,他们说的是authcode而不是code。我只是将身份验证代码从前端传递到后端。由于我是新手,请删除任何html编码。ie(%2f=>/)。这也是我不能得到它的一个原因

以下工作:

authCode := "4/3AGEkPVEN9O**70ish char***G0uOPYtQWkUSc" 
// authcode was html encoded which the conf.Exchange needed a decoded version.
saKey, err := ioutil.ReadFile("oauth2_webapp.json")  
conf, err := google.ConfigFromJSON(saKey, calendar.CalendarReadonlyScope) 
token, err := conf.Exchange(ctx,authCode)

您必须意识到访问令牌通常在60分钟后过期,考虑设置。更一般地说,您的身份验证需要遵循Google授权的流程之一。首先估计哪一个是您的,然后阅读相应的Auth协议的文档,例如,谢谢提示。但那不是我想要的。我期待使用GoAPI库。在给定访问令牌的情况下,我不知道如何使用它。我node.js实现与您的案例相关?如果您有有效的访问令牌,是什么阻止您将其用于for go?我尝试的原始方法只提供了accesstoken。使用chrome标识。只有访问令牌是不够的。完整令牌(访问、刷新、到期和类型)。所以我找到了另一种获取身份验证代码的方法,而不是后来才意识到“代码”是身份验证代码。他们的医生很烂。希望我们能编辑和改进它。
jwt, err := google.JWTConfigFromJSON(g.key, gmail.GmailReadonlyScope)     
jwt.Subject = "myname@gmail.com" //impersonate user   
service, err := calendar.NewService(ctx, option.WithHTTPClient(jwt.Client(ctx)))
serviceAccountKey, err := ioutil.ReadFile("oauth2_webapp.json")  
conf, err := google.ConfigFromJSON(serviceAccountKey, calendar.CalendarReadonlyScope) 
token, err := conf.Exchange(ctx,"code") // code seems like another method 
calendarService, err := calendar.NewService(ctx,
option.WithTokenSource(config.TokenSource(ctx, token))) 
res, err := calService.Events.List("myemail@gmail.com").Do()
authCode := "4/3AGEkPVEN9O**70ish char***G0uOPYtQWkUSc" 
// authcode was html encoded which the conf.Exchange needed a decoded version.
saKey, err := ioutil.ReadFile("oauth2_webapp.json")  
conf, err := google.ConfigFromJSON(saKey, calendar.CalendarReadonlyScope) 
token, err := conf.Exchange(ctx,authCode)