gpt4 book ai didi

authentication - 在 Golang 中手动提供 Google 服务帐户凭据

转载 作者:IT王子 更新时间:2023-10-29 02:21:15 24 4
gpt4 key购买 nike

要通过 Go Proxy 库远程连接到 Google-cloud Mysql 数据库,我需要提供服务帐户凭据。这可以通过设置 GOOGLE_APPLICATION_CREDENTIALS 环境变量来完成,但由于我希望应用程序能够在不同的机器上运行而不必在任何地方设置环境变量,所以这不是一个选项。

因此,我必须手动向我的 Golang 应用程序提供服务帐户凭据。下面的代码(没有身份验证)给出了这个错误信息:

default proxy initialization failed; consider calling proxy.Init explicitly: google: could not find default credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.

Google 提供了详尽的文档,说明如何修复多种编程语言的手动身份验证,但不包括 Go:

https://cloud.google.com/docs/authentication/production#auth-cloud-explicit-csharp

谁能帮我在 Golang 中手动设置身份验证凭据?

非常感谢!

package main

import (
"database/sql"
"fmt"
"github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/dialers/mysql"
)

var db *sql.DB

func main() {

cfg := mysql.Cfg("mysql", "********", "********") //name , username, password
cfg.DBName = "MyDBName"
db := mysql.DialCfg(cfg)
defer db.Close()

}

最佳答案

使用 cloudsql-proxy 时包,你不是直接连接到你的云 SQL 实例,而是创建一个 proxy并连接到它。这是您必须提供凭据的代理连接。

在 cloud-sql 包的测试中有一个 how to init the proxy with credentials 的例子.

代理initializes by itself如果您不手动操作,但您可以调用 proxy.Init 使用 http 客户端,您可以创建带有凭据的 http 客户端。

我还没有测试过这个,但你可以尝试像 proxy.Init(oauth2.NewClient(ctx, oauth2.StaticTokenSource(&oauth2.Token{AccessToken: <YOUR_TOKEN>})), nil, nil) 这样的东西在 DialCfg 之前打电话。

一个更好的例子,如果您提供您的凭据文件(因此它不是硬编码的)将类似于:

func main()
credsFile := "path/to/your/credentials.json"
SQLScope := "https://www.googleapis.com/auth/sqlservice.admin"
ctx := context.Background()

creds, err := ioutil.ReadFile(credsFile)
if err != nil {
# handle error
}

cfg, err := goauth.JWTConfigFromJSON(creds, SQLScope)
if err != nil {
# handle error
}

client := cfg.Client(ctx)
proxy.Init(client, nil, nil)

var db *sql.DB

cfg := mysql.Cfg("mysql", "********", "********") //name , username, password
cfg.DBName = "MyDBName"
db, err := mysql.DialCfg(cfg)
if err != nil {
# handle error
}
defer db.Close()

# your calls to cloudSQL

}

(这主要是 the tests on that package 的副本。)

关于authentication - 在 Golang 中手动提供 Google 服务帐户凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48671333/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com