golang.org/x/oauth2/google库是否支持服务身份验证服务?

时间:2017-11-06 13:33:02

标签: go oauth-2.0 google-api google-oauth2 google-authentication

我开发了一个连接到Google Calendar API(v3)的Python后端服务,检索日历条目并公开它们(通过HTTP调用检索它们)。为此,我使用OAuth 2.0 for Server to Server Applications

几年前开发我的应用程序时,Google提供的模块尚未移植到Python 3,我采用了JWT方式(" HTTP / REST"在上面链接的文档中)。

我现在想学习Go并开始移植这个应用程序。

Google Calendar API quickstart for Go提供了一个完整的示例,但它假定身份验证将包含来自用户的同意屏幕(3-legged oAuth)。这与Python示例类似,但也有使用服务到服务方法的Python版本。

此服务是否可以在Go库中提供服务身份验证功能?

如果不是,我会手动生成一个JWT(就像我现在用我的代码的Python版本一样)但是因为我刚刚开始使用Go,所以我希望尽可能多地使用库来学习飞。

1 个答案:

答案 0 :(得分:0)

我现在不打算对此进行测试,但我相信这样的事情应该有效:

package main

import (
    "context"
    "io/ioutil"
    "log"

    "golang.org/x/oauth2/google"
    calendar "google.golang.org/api/calendar/v3"
)

func main() {
    cred, err := ioutil.ReadFile("service_account.json")
    if err != nil {
        log.Fatalf("Unable to read JSON credentials config %v", err)
    }

    conf, err := google.JWTConfigFromJSON(cred, "https://www.googleapis.com/auth/calendar")
    if err != nil {
        log.Fatalf("Unable to obtain JWT conf %v", err)
    }

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

service_account.json的内容应该以某种方式从服务帐户配置中获取,但我对该部分并不是100%肯定。