我有一个来自Google控制台的Google服务帐户私钥(json格式)。
如何在golang中创建新的客户端(我使用什么google api)并在不设置环境变量的情况下对获得的凭据进行身份验证?
我想在Golang中手动提供Google服务帐户凭据。
我首先将json文件作为字节数组传递:
creds, err := google.CredentialsFromJSON(ctx, blob)
。 Blob是json文件的字节数组。
即使更改了私钥(ouch),我也可以通过cloud.google.com/go/secretmanager/apiv1成功创建客户端。因此,我想知道在什么时候以及如何验证凭据?
谢谢。
答案 0 :(得分:1)
问题尚不清楚。我允许自己改写为“ 如何从服务帐户的密钥文件中创建有效的凭证?”
好的,Google确实实现了strategy来为调用过程提供经过身份验证的身份。
粗略地看,它确实在寻找一个名为GOOGLE_APPLICATION_CREDENTIAL的环境变量定义,该值包含指向有效SA密钥文件的路径。否则,它将使用其运行的计算部分(GCE,GKE pod,Appengine,云函数等)中的默认服务帐户。
最终,否则您会出错。
在本地工作,设置此默认凭据的一个好习惯是将Cloud SDK与命令gcloud auth application-default login
一起使用。这样,应用程序将代表登录的用户(例如您,并使用您的权限和配额使用)。
否则,您可以手动设置环境变量,使其指向您下载的服务帐户的密钥文件。
现在,如果您是从Google云环境外部运行的,则可以像手动操作一样,通过不生成密钥文件来手动构建证书。以下example是显式的。 您必须了解的是,您伪造的凭证是任何Google API客户端构造函数的参数。
一旦使用证书构建了API客户端,您就可以通过调用其公开的方法来使用它。身份验证在后台进行。每次对Google API的调用都会使用OAuth2令牌进行身份验证,该令牌的检索流程在here中进行了描述。
如果您需要说服您,可以深入研究客户端API的源代码客户端,但这很高兴,您不必这样做。