Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Authentication 如何验证google服务帐户凭据_Authentication_Google Cloud Platform_Cloud_Client - Fatal编程技术网

Authentication 如何验证google服务帐户凭据

Authentication 如何验证google服务帐户凭据,authentication,google-cloud-platform,cloud,client,Authentication,Google Cloud Platform,Cloud,Client,我有一个来自谷歌控制台的谷歌服务帐户私钥(json格式)。 如何在golang中创建新的客户端(我使用什么google api)并在不设置环境变量的情况下验证我获得的凭据? 我想在Golang手动提供Google服务帐户凭据。 我首先将json文件作为字节数组传递: creds,err:=google.CredentialsFromJSON(ctx,blob)。Blob是json文件的字节数组。 我可以使用cloud.google.com/go/secretmanager/apiv1成功创建一个

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

问题不清楚。我允许自己将其重新表述为“如何从服务帐户的密钥文件创建有效凭据?
好的,Google确实实现了一个为调用过程提供身份验证身份的方法。 粗略地说,它确实在寻找一个名为GOOGLE_APPLICATION_CREDENTIAL的环境变量定义,该定义的值包含一个有效SA密钥文件的路径。否则,它将使用从其运行的计算(GCE、GKE pod、Appengine、cloud function等)中获得的默认服务帐户。
最后,你有一个错误,否则

在本地工作时,设置此默认凭据的一个好做法是使用cloudsdk with命令。这样,应用程序将代表已登录的用户(例如,您可以使用您的权限和配额进行消费)。
否则,您可以手动设置env var以指向您下载的服务帐户的密钥文件

现在,如果您从google云环境运行到外部,您可以像您一样使用密钥文件手动构建凭证。以下是明确的您必须了解的是,您伪造的凭证是任何Google API客户端构造函数的参数。
使用您的凭证构建API客户机后,您只需调用它公开的方法即可使用它。身份验证是在幕后进行的。对GoogleAPI的每个调用都使用OAuth2令牌进行身份验证,其中描述了检索流。
如果需要说服,您可以深入了解客户端API的源代码客户端,但好在您不必这样做。

您是否尝试使用您的凭据?谢谢@chaiyachaiya的详细回复。案例是:我的用户从谷歌控制台下载json格式的服务帐户私钥。然后用户打开json文件,将内容复制到UI并提交(在post请求中将其作为正文的一部分发布)。后端将对其进行解组,并获取内容。现在,在使用这些信息访问gcp之前,我想验证json的内容,以防用户在UI中输入错误的信息。下一步:我更改了UI中的私钥,并尝试了以下操作:
creds,err:=google.CredentialsFromJSON(ctx,blob,secretmanager.DefaultAuthScopes())
\uhr=secretmanager.NewClient(ctx,option.WithCredentials(creds))
。未获得任何身份验证错误。你说认证是在引擎盖下进行的,那么我做错了什么?还有,请阅读AOWT。我不应该用这个吗?再次感谢您抽出时间!!用例是什么?您提供密钥文件的用户是您的合作伙伴,需要访问您的一些google服务(例如GCS或云端点API)?或者你需要这个文件让用户使用一个公共的谷歌API(比如Gmail)。这些情况都不应意味着在表单中复制/粘贴密钥文件的内容。我将根据你对这些问题的回答详细说明。您指向的链接实际上是两条腿的Oauth2进程,但您不需要注意它。谷歌客户是这样做的。(例如:调用client.CreateSecret(ctx,createSecretReq))时,请检查: