Проверка подлинности Google Cloud с помощью файла ключей JSON с использованием cURL - PullRequest
2 голосов
/ 21 марта 2019

У меня есть файл ключа JSON для Google Cloud в виде:

{
  "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"
}

Я хотел бы получить access_token при использовании обычных команд curl вместо GCP Console или установка gcloud tool .

Я бы ожидал что-то вроде:

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

1 Ответ

0 голосов
/ 20 июля 2019

скручивание не достаточно

Я не думаю, что вы сможете сделать это только с помощью curl, потому что я считаю, что для этого требуется аутентификация JWT - чтение между строками в документах и ​​сообщениями об ошибках, которые я получил сам.

oauth2l: облегченный подход

У них есть oauth2l, которые могут генерировать JWT из service_account.json JWK (хотя он также должен работать с тем, который у вас есть, который вместо этого использует PEM или CRT).

К сожалению, у них нет прямой ссылки на скачивание, но это не слишком трудно получить:

Попробуйте это:

Установить Go:

Установите свой путь:

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

Затем установите oauth2l:

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

Затем сгенерируйте токен API JWT:

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.

...