如何验证Google服务帐户凭据

时间:2020-09-22 15:22:44

标签: authentication google-cloud-platform cloud client

我有一个来自Google控制台的Google服务帐户私钥(json格式)。 如何在golang中创建新的客户端(我使用什么google api)并在不设置环境变量的情况下对获得的凭据进行身份验证? 我想在Golang中手动提供Google服务帐户凭据。 我首先将json文件作为字节数组传递: creds, err := google.CredentialsFromJSON(ctx, blob)。 Blob是json文件的字节数组。 即使更改了私钥(ouch),我也可以通过cloud.google.com/go/secretmanager/apiv1成功创建客户端。因此,我想知道在什么时候以及如何验证凭据? 谢谢。

1 个答案:

答案 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的源代码客户端,但这很高兴,您不必这样做。