我有一个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
答案 0 :(得分:0)
我不认为仅凭curl
就可以做到这一点,因为我认为它需要JWT身份验证-在文档中的行与我自己得到的错误消息之间进行读取
它们具有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
更轻。