Authentication 在Golang中手动提供Google服务帐户凭据
要通过Go代理库远程连接到Google cloud Mysql数据库,我需要提供服务帐户凭据。这可以通过设置Authentication 在Golang中手动提供Google服务帐户凭据,authentication,go,proxy,google-cloud-platform,Authentication,Go,Proxy,Google Cloud Platform,要通过Go代理库远程连接到Google cloud Mysql数据库,我需要提供服务帐户凭据。这可以通过设置GOOGLE\u APPLICATION\u CREDENTIALS环境变量来实现,但由于我希望应用程序能够在不同的机器上运行,而无需在任何地方设置环境变量,因此这不是一个选项 因此,我必须手动向我的Golang应用程序提供服务帐户凭据。下面的代码(没有身份验证)给出了此错误消息: 默认代理初始化失败;考虑调用代理。init明确:谷歌:找不到默认凭据。有关更多信息,请参阅 Google提供
GOOGLE\u APPLICATION\u CREDENTIALS
环境变量来实现,但由于我希望应用程序能够在不同的机器上运行,而无需在任何地方设置环境变量,因此这不是一个选项
因此,我必须手动向我的Golang应用程序提供服务帐户凭据。下面的代码(没有身份验证)给出了此错误消息:
默认代理初始化失败;考虑调用代理。init明确:谷歌:找不到默认凭据。有关更多信息,请参阅
Google提供了详细的文档说明如何修复多种编程语言的手动身份验证,但不适用于Go:
有人能帮我在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代理
包时,您并不是直接连接到您的cloudsql实例,而是创建并连接到它。在代理连接中,您必须提供凭据
在云sql包的测试中,有一个示例
如果不手动执行代理,但可以使用http客户端调用代理,并且可以使用凭据创建http客户端
我还没有对此进行测试,但是您可以在调用DialCfg
之前尝试类似于proxy.Init(oauth2.NewClient(ctx,oauth2.StaticTokenSource(&oauth2.Token{AccessToken:})),nil,nil的方法
更好的示例是,如果您提供凭证文件(因此它不是硬编码的),则类似于:
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
}
(这主要是一份。)