web-dev-qa-db-ja.com

Curl CLIを使用してOAuth 2.0を実行するには?

Google OAuth 2.0を実行するためにWindowsコマンドプロンプトからcurlを使用したいと思います。私の目標は、OAuthサーバーが実装する、 HTTPヘッダーなどを参照してください。

Windowsコマンドプロンプトからcurl.exeを使用してこれを行うにはどうすればよいですか?

7
John Hanley

Curl CLIを使用してOAuth 2.0を実行するには?

この回答は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"

Google APIのOAuth 2.0スコープ

詳細:

  • 次のステートメントをWindowsバッチファイルにコピーします。
  • 環境に合わせて変更します。
  • 使用するブラウザーのスクリプトを変更します。
  • バッチファイルを実行します。
  • ブラウザが起動します。
  • ブラウザは https://accounts.google.com に移動します。ここでGoogleを完了できますOAuth 2.0認証。
  • 完了すると、ブラウザウィンドウにコードが表示されます。
  • このコード(control-c)をブラウザーウィンドウからコピーし、コマンドプロンプトウィンドウ(control-右クリック)に貼り付けます。
  • スクリプトは、トークンの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%

最後の2行は、さらにスクリプトでさらに使用するためにファイルに保存されたアクセストークンを読み取る方法を示しています。

トークンは、デフォルト値である60分後に失効します。

これについて詳しく説明する記事をブログに書きました。

Google OAuth 2.0 – Curlでテストする

6
John Hanley