首页 > 解决方案 > 为什么我不能使用 DefaultClient 访问日历 API?

问题描述

我想使用Google 的快速入门代码来访问我的 Google Calendar。当我按照这些步骤操作时它可以工作,但是将其更改为使用 DefaultClient会导致 403 错误:

$ go run quickstart.go
2021/02/09 14:03:19 Unable to retrieve next ten of the user's events: googleapi: Error 403: Request had insufficient authentication
scopes.
More details:
Reason: insufficientPermissions, Message: Insufficient Permission
exit status 1

这是我当前检索本地默认凭据并将它们用于生成 httpClient 的代码:

client, err := google.DefaultClient(oauth2.NoContext, calendar.CalendarReadonlyScope)
if err != nil {
   log.Fatalf("auth broke: %v", err)
}

srv, err := calendar.New(client)
if err != nil {
   log.Fatalf("Unable to retrieve Calendar client: %v", err)
}

t := time.Now().Format(time.RFC3339)
events, err := srv.Events.List("primary").ShowDeleted(false).
   SingleEvents(true).TimeMin(t).MaxResults(10).OrderBy("startTime").Do()
if err != nil {
   log.Fatalf("Unable to retrieve next ten of the user's events: %v", err)
}

fmt.Println("Upcoming events:")
if len(events.Items) == 0 {
   fmt.Println("No upcoming events found.")
} else {
   for _, item := range events.Items {
      date := item.Start.DateTime
      if date == "" {
         date = item.Start.Date
      }
      fmt.Printf("%v (%v)\n", item.Summary, date)
   }
}

如果我在我的 GCP 项目中创建 OAuth2 凭据并使用它,该代码确实有效,但这不是我想在这里使用的方法。

  1. 我知道我可能需要使用 3-legged 方法来获取 OAuth2 令牌,但我找不到任何关于如何使用 Default Credentials 执行此操作的示例。
  2. 我可以不使用类似于gcloudCLI 的内置令牌生成的方法吗?

标签: gogoogle-cloud-platformgoogle-calendar-apigoogle-workspace

解决方案


推荐阅读