web-dev-qa-db-fra.com

Comment effectuer OAuth 2.0 en utilisant la CLI Curl?

Je voudrais utiliser curl à partir d'une invite de commande Windows pour exécuter Google OAuth 2.0. Mon objectif est de mieux comprendre les flux d'authentification qu'un OAuth serveur implémente, voir les en-têtes HTTP, etc.

Comment cela peut-il être fait en utilisant curl.exe à partir d'une invite de commande Windows?

7
John Hanley

Comment effectuer OAuth 2.0 en utilisant le CLI Curl?

Cette réponse s'adresse aux utilisateurs d'invite de commande Windows, mais devrait également être facilement adaptable à Linux et Mac.

Vous aurez besoin de votre Google Client ID et Client Secret. Ceux-ci peuvent être obtenus à partir de la console Google sous APIs & Services -> Credentials.

Dans l'exemple suivant, la portée est cloud-platform. Modifiez-le pour utiliser les étendues que vous souhaitez tester. Voici quelques domaines que vous pouvez tester avec:

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

Étendues OAuth 2.0 pour les API Google

Détails:

  • Copiez les instructions suivantes dans un fichier de commandes Windows.
  • Modifiez pour s'adapter à votre environnement.
  • Modifiez le script du navigateur que vous souhaitez utiliser.
  • Exécutez le fichier de commandes.
  • Un navigateur sera lancé.
  • Le navigateur accédera à https://accounts.google.com , où vous pouvez effectuer l'authentification Google OAuth 2.0.
  • Une fois terminé, un code sera affiché dans la fenêtre du navigateur.
  • Copiez ce code (control-c) à partir de la fenêtre du navigateur et collez-le dans la commande Invite window (control-rightclick).
  • Le script achèvera l'échange de code OAuth 2.0 pour un jeton).
  • Le jeton sera affiché dans la commande Invite.
  • Le jeton renvoyé contient un jeton d'accès pouvant être utilisé dans plusieurs commandes curl.

Script de lot 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

La sortie finale ressemble à ceci:

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

Exemple de commande curl utilisant le jeton d'accès:

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%"

Conseil: enregistrez le jeton d'accès dans un fichier

Modifiez la dernière ligne du script batch pour utiliser jq afin de traiter la sortie:

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%

Les deux dernières lignes indiquent comment lire le jeton d’accès enregistré dans un fichier pour une utilisation ultérieure dans plusieurs scripts.

N'oubliez pas que les jetons expirent après 60 minutes, ce qui correspond à la valeur par défaut.

J'ai écrit un article détaillant cela sur mon blog:

Google OAuth 2.0 - Test avec Curl

6
John Hanley