这可能吗?
当我尝试使用以下服务帐户密钥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。我宁愿不发放这些证书。
有什么建议吗?
答案 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)