使用 Go 验证远程配置 REST API 的服务帐户

cre*_*not 4 go google-client firebase google-cloud-platform firebase-remote-config

这边火力地堡文档解释如何检索令牌发出请求到所需的远程配置REST API

它提供了Python、Java 和 Node.js 的示例代码。因为没有Go 的代码,它把我送到了Google Client Library (for Go)。你也许能理解我为什么迷路了......

这些示例使用GoogleCredential Java中ServiceAccountCredentials 在Pythongoogle.auth.JWTNode.js的。我在这里找不到任何这些。我不知道为什么没有明确的命名约定。

我已经找到

firebaseremoteconfig-gen.go:代码看起来已经实现了Firebase 文档页面试图“手动”实现的目标。比较:docpackage

帮助

因为包的“用法示例”结束得奇怪突然,与广泛相反,我不明白如何使用它。

如果有人能告诉我如何使用它,我会得到帮助:

firebaseremoteconfigService, err := firebaseremoteconfig.New(oauthHttpClient)
Run Code Online (Sandbox Code Playgroud)

我不知道我会从哪里来oauthHttpClientoauth2存储库中有一个包,但我面临同样的问题

oauth2Service, err := oauth2.New(oauthHttpClient)
Run Code Online (Sandbox Code Playgroud)

oauthHttpClient再次需要,所以这不能成为解决方案。
http.Client可以是任何东西,但我需要使用service-account.json文件进行身份验证,如此处的三个示例片段所示

标签说明

我希望有人有将Firebase 远程配置Go集成的经验,有人知道Google 客户端 API身份验证的工作原理,或者有人对Go足够了解以了解其用法。

Zak*_*Zak 5

使用谷歌 API 进行身份验证有几种主要方法,它们记录在此处:

链接到文档

记录的方式是“3-legged OAuth”、“使用 API 密钥”,最后是“服务帐户”。

从您在问题中包含的链接;您正在查看“服务帐户”的 Python/Java/Node 示例。

在 go 中使用服务帐户

oauthHttpClient你指的是HTTP客户端,将认证信息会自动连接到请求。

您可以使用此包创建一个:

https://godoc.org/golang.org/x/oauth2/google

以其他语言链接的示例使用“服务帐户 json 密钥文件”。

使用下面链接的方法,您可以读取该密钥文件并创建一个jwt.Config结构,使您可以访问所需的客户端。

https://godoc.org/golang.org/x/oauth2/google#JWTConfigFromJSON

链接的其他语言示例的 go 等价物是;

data, err := ioutil.ReadFile("/path/to/your-project-key.json")
if err != nil {
    log.Fatal(err)
}
conf, err := google.JWTConfigFromJSON(data, "https://www.googleapis.com/auth/firebase.remoteconfig")
if err != nil {
    log.Fatal(err)
}
// Initiate an http.Client. The following GET request will be
// authorized and authenticated on the behalf of
// your service account.
client := conf.Client(oauth2.NoContext)
client.Get("...")
Run Code Online (Sandbox Code Playgroud)