如何使用服务帐户密钥JSON与服务帐户JSON发布到pubsub

时间:2019-08-16 20:40:24

标签: go google-cloud-platform publish-subscribe

这可能吗?

当我尝试使用以下服务帐户密钥JSON时:

{
 "keyAlgorithm": "KEY_ALG_RSA_2048",
 "keyOrigin": "GOOGLE_PROVIDED",
 "name": "projects/XXXX",
 "privateKeyData": "XXXXXX",
 "privateKeyType": "TYPE_GOOGLE_CREDENTIALS_FILE",
 "validAfterTime": "2019-08-16T19:45:25Z",
 "validBeforeTime": "2029-08-13T19:45:25Z"
}

我收到以下错误:

client: pubsub: google: error getting credentials using GOOGLE_APPLICATION_CREDENTIALS environment variable: missing 'type' field in credentials

我想念什么吗?显然,它只想使用服务帐户JSON。我宁愿不发放这些证书。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

错误的原因是您正在使用API​​ service.projects.serviceAccounts.keys.create的原始输出。

查看问题中的输出。密钥privateKeyData包含服务帐户JSON密钥文件的base64编码值。创建凭据时,Base64会对该值进行解码并用作输入的JSON。

Python示例:

from google.oauth2 import service_account
info = json.loads(base64.b64decode(privateKeyData))
credentials = service_account.Credentials.from_service_account_info(info)

转到示例:

import b64 "encoding/base64"
import "golang.org/x/oauth2/google"
scope := "https://www.googleapis.com/auth/cloud-platform"
s, _ := b64.StdEncoding.DecodeString(privateKeyData)
ctx := context.Background()
creds, err := google.CredentialsFromJSON(ctx, s, scope)