Как выполнить OAuth 2.0 с помощью Curl CLI? - PullRequest
0 голосов
/ 18 ноября 2018

Я хотел бы использовать curl из командной строки Windows для выполнения Google OAuth 2.0. Моя цель - лучше понять процессы аутентификации, которые реализует сервер OAuth, увидеть заголовки HTTP и т. Д.

Как это можно сделать с помощью curl.exe из командной строки Windows?

1 Ответ

0 голосов
/ 18 ноября 2018

Как выполнить OAuth 2.0 с помощью Curl CLI?

Этот ответ предназначен для пользователей командной строки Windows, но его также можно легко адаптировать к Linux и Mac.

Вам понадобятся ваши Google Client ID и Client Secret. Их можно получить в консоли Google по адресу APIs & Services -> Credentials.

В следующем примере область действия равна cloud-platform. Изменить, чтобы использовать области, которые вы хотите проверить с. Вот несколько областей, с которыми вы можете протестировать:

"https://www.googleapis.com/auth/cloud-platform"
"https://www.googleapis.com/auth/cloud-platform.read-only"
"https://www.googleapis.com/auth/devstorage.full_control"
"https://www.googleapis.com/auth/devstorage.read_write"
"https://www.googleapis.com/auth/devstorage.read_only"
"https://www.googleapis.com/auth/bigquery"
"https://www.googleapis.com/auth/datastore"

Области OAuth 2.0 для API Google

подробности:

  • Скопируйте следующие операторы в пакетный файл Windows.
  • Изменить в соответствии с вашей средой.
  • Измените скрипт для браузера, который вы хотите использовать.
  • Запустить пакетный файл.
  • Будет запущен браузер.
  • Браузер перейдет на https://accounts.google.com, где вы сможете выполнить аутентификацию Google OAuth 2.0.
  • После завершения код будет отображаться в окне браузера.
  • Скопируйте этот код (control-c) из окна браузера и вставьте в окно командной строки (control-rightclick).
  • Сценарий завершит обмен кодами OAuth 2.0 для токена.
  • Токен будет отображаться в командной строке.
  • Возвращенный токен содержит токен доступа, который можно использовать в других командах curl.

Пакетный сценарий Windows:

set CLIENT_ID=Replace_with_your_Client_ID
set CLIENT_SECRET=Replace_with_your_Client_Secret
set SCOPE=https://www.googleapis.com/auth/cloud-platform
set ENDPOINT=https://accounts.google.com/o/oauth2/v2/auth

set URL="%ENDPOINT%?client_id=%CLIENT_ID%&response_type=code&scope=%SCOPE%&access_type=offline&redirect_uri=urn:ietf:wg:oauth:2.0:oob"

@REM start iexplore %URL%
@REM start microsoft-edge:%URL%
start chrome %URL%

set /p AUTH_CODE="Enter Code displayed in browser: "

curl ^
--data client_id=%CLIENT_ID% ^
--data client_secret=%CLIENT_SECRET% ^
--data code=%AUTH_CODE% ^
--data redirect_uri=urn:ietf:wg:oauth:2.0:oob ^
--data grant_type=authorization_code ^
https://www.googleapis.com/oauth2/v4/token

Окончательный вывод выглядит так:

{
  "access_token": "ya29.deleted_for_security_reasons",
  "expires_in": 3600,
  "refresh_token": "1/jk3/deleted_for_security_reasons",
  "scope": "https://www.googleapis.com/auth/cloud-platform",
  "token_type": "Bearer"
}

Пример команды curl с использованием токена доступа:

set ACCESS_TOKEN=replace_with_your_access_token
set PROJECT=development-123456
set ZONE=us-west-1a
set INSTANCE_NAME=dev-system

@REM - This endpoint will start the instance named INSTANCE_NAME in ZONE
set ENDPOINT=https://www.googleapis.com/compute/v1/projects/%PROJECT%/zones/%ZONE%/instances/%INSTANCE_NAM%/start

curl -H "Authorization: Bearer %ACCESS_TOKEN" "%ENDPOINT%"

Совет. Сохраните токен доступа в файл

.

Измените последнюю строку пакетного сценария, чтобы использовать jq для обработки вывода:

curl ^
--data client_id=%CLIENT_ID% ^
--data client_secret=%CLIENT_SECRET% ^
--data code=%AUTH_CODE% ^
--data redirect_uri=urn:ietf:wg:oauth:2.0:oob ^
--data grant_type=authorization_code ^
https://www.googleapis.com/oauth2/v4/token | jq -r ".access_token > token.save

set /p ACCESS_TOKEN=<token.save
echo %ACCESS_TOKEN%

Последние две строки показывают, как прочитать токен доступа, который был сохранен в файл, для дальнейшего использования в других сценариях.

Помните, что срок действия токенов истекает через 60 минут, что является значением по умолчанию.

Я написал статью, подробно об этом в моем блоге:

Google OAuth 2.0 - тестирование с помощью Curl

...