Как выполнить 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