go - 为什么我不能使用 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 凭据并使用它,该代码确实有效,但这不是我想在这里使用的方法。
- 我知道我可能需要使用 3-legged 方法来获取 OAuth2 令牌,但我找不到任何关于如何使用 Default Credentials 执行此操作的示例。
- 我可以不使用类似于
gcloud
CLI 的内置令牌生成的方法吗?
解决方案
推荐阅读
- python - 将文本转换为二进制列
- python - 使用不同颜色和标签的集群
- scala - 递归函数抛出 StackOverflowError
- python - 多头数据帧中的 dropna ( )
- git - 将 ssh 连接到谷歌虚拟实例总是被拒绝权限(公钥)
- python - 如何检查网页上是否有按钮?
- nginx - Prestashop 模块链接重定向到生产服务器中的管理仪表板
- javascript - 我正在运行这个javascript代码,但它给了我一个..错误请告诉我出了什么问题,因为我认为代码是正确的?
- c++ - 没有默认构造函数时用垃圾数据初始化对象
- php - 带有父字符串的数组树