使用cURL使用JSON密钥文件进行Google Cloud身份验证

时间:2019-03-21 14:28:58

标签: curl oauth google-cloud-platform google-oauth gcloud

我有一个Google Cloud的JSON密钥文件,格式为:

{
  "type": "service_account",
  "project_id": "###",
  "private_key_id": "###",
  "private_key": "-----BEGIN PRIVATE KEY-----\n
  ########################################
  \n-----END PRIVATE KEY-----\n",
  "client_email": "###@###.gserviceaccount.com",
  "client_id": "###",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/###.gserviceaccount.com"
}

我想在使用常规curl命令而不是GCP Console或安装gcloud tool时得到一个access_token

我希望这样:

curl \
--request POST \
--data-binary "@path/to/key.json" \
https://accounts.google.com/o/oauth2/token

1 个答案:

答案 0 :(得分:0)

卷曲不够

我不认为仅凭curl就可以做到这一点,因为我认为它需要JWT身份验证-在文档中的行与我自己得到的错误消息之间进行读取

oauth2l:一种轻量级的方法

它们具有oauth2l,可以从service_account.json JWK生成JWT(尽管它也应该与使用PEM或CRT的JWK一起工作)。

不幸的是,他们没有直接下载链接,但是 也不难:

尝试一下:

安装Go:

设置您的PATH:

export PATH="$HOME/go/bin:$PATH"

然后安装oauth2l

go get github.com/google/oauth2l
go install github.com/google/oauth2l

然后生成一个JWT API令牌:

oauth2l fetch --jwt --json ./service_account.json https://www.googleapis.com/auth/cloud-platform

返回卷曲

然后使用curl来获取所需的API:

token=$(oauth2l fetch --jwt --json ./service_account.json https://www.googleapis.com/auth/cloud-platform)

curl -X POST https://www.googleapis.com/dns/v1/projects/<project>/managedZones \
  -H "Authorization: Bearer $token"

这不是理想的选择,但是我认为这将以最少的抽象为您提供所需的东西。

仍然缺少抽象

弄清楚后,我会尝试回发。它需要某种工具,但我认为它的重量甚至可能比oauth2l更轻。