我有一个用于 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 控制台或安装 gcloud 工具 时获得
access_token
。
我希望是这样的:
curl \
--request POST \
--data-binary "@path/to/key.json" \
https://accounts.google.com/o/oauth2/token
我不认为你只用
curl
就可以做到这一点,因为我相信它需要JWT身份验证 - 阅读文档中的行和我自己得到的错误消息。
oauth2l
,它可以从 service_account.json
JWK 生成 JWT(尽管它也应该与您拥有的使用 PEM 或 CRT 的 JWK 一起工作)。
不幸的是,他们没有直接下载链接,但这并不太很难获得:
试试这个:
安装去:
然后安装
oauth2l
:
go install github.com/google/oauth2l@latest
然后生成一个JWT API Token:
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
更轻。
预编译的 oauth2l 二进制文件可从 oauth2l GitHub 页面下载: