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?
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:
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: