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

使用cURL使用JSON密钥文件进行Google云身份验证,curl,oauth,google-cloud-platform,google-oauth,gcloud,Curl,Oauth,Google Cloud Platform,Google Oauth,Gcloud,我有一个谷歌云的JSON密钥文件,格式如下: { "type": "service_account", "project_id": "###", "private_key_id": "###", "private_key": "-----BEGIN PRIVATE KEY-----\n ######################################## \n-----END PRIVATE KEY-----\n", "client_email": "##

我有一个谷歌云的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命令而不是安装或时获得一个
access\u令牌

我希望有这样的情况:

curl\
--请帖\
--数据二进制文件“@path/to/key.json”\
https://accounts.google.com/o/oauth2/token
curl是不够的 我不认为你仅仅用
curl
就能做到这一点,因为我认为它需要JWT身份验证——读取文档中的行和我自己收到的错误消息

oauth2l:一种轻量级的方法 他们有,它可以从
service\u account.json
JWK生成JWT(尽管它也应该与使用PEM或CRT的JWT一起使用)

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

试试这个:

安装Go:

  • 看(简单的)或(好的读物)
然后安装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"
token=$(oauth2l fetch--jwt--json./service_account.jsonhttps://www.googleapis.com/auth/cloud-platform)
curl-X柱https://www.googleapis.com/dns/v1/projects//managedZones \
-H“授权:持票人$token”
这并不理想,但我认为这将以最少的抽象得到您所需要的

更不抽象
当我弄明白这件事后,我会试着发回。它需要某种工具,但我认为它比oauth2l更轻。请看这里:我也在尝试这样做,因为我在我的CI Docker映像中使用gsutil,安装所有东西(包括Python)需要大约100MB的内存如果我能从一个简单的bash脚本与GCS交互,而不是安装所有这些重依赖项,那就太好了。