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

问题描述 投票:0回答:2

我有一个用于 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 oauth google-cloud-platform google-oauth gcloud
2个回答
5
投票

卷曲不够

我不认为你只用

curl
就可以做到这一点,因为我相信它需要JWT身份验证 - 阅读文档中的行和我自己得到的错误消息。

oauth2l:一种轻量级的方法

他们有

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
更轻。


1
投票

预编译的 oauth2l 二进制文件可从 oauth2l GitHub 页面下载

macosLinuxWindows

© www.soinside.com 2019 - 2024. All rights reserved.