[JAVA] Jeton d'accès à l'API Google et jeton d'actualisation

introduction

L'autre jour, lorsque j'ai utilisé l'API de Google, j'ai oublié une erreur Not Found et une erreur Bad Request, je vais donc les résumer sous forme de mémo.

Créer un projet depuis la console Google

https://console.developers.google.com/apis/dashboard

Création d'informations d'identification d'API

image.png

1. ID client OAuth

Sélectionnez ceci si l'utilisateur consent à l'autorisation à partir de l'écran image.png

Après avoir entré le type d'application, le nom et l'URI de redirection approuvé, un ID client et un secret client ont été générés.

2. Clé de compte de service

Obtenez un jeton d'accès au format JSON dans les coulisses sans opération d'écran. Sélectionnez ceci pour le traitement par lots image.png

Téléchargez le fichier au format JSON

Obtention d'un code d'autorisation

Définir le client, le scoop et l'accès à partir de l'URL

https://accounts.google.com/o/oauth2/v2/auth?
 scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.metadata.readonly&
 access_type=offline&
 include_granted_scopes=true&
 redirect_uri=http%3A%2F%2localhost:8080&
 response_type=code&
 client_id=ID client obtenu ci-dessus

Si vous êtes d'accord avec Google, vous pouvez obtenir le code d'autorisation à partir de l'URL. http://localhost:8080/?code=xxxxxxxxxxxx&scope=yyyyyyyyyyy

Obtenez un jeton d'accès

spécification

image.png

image.png

Point 1: méthode POST. NG avec méthode GET Point 2: Définissez "Content-Type: application / x-www-form-urlencoded" dans l'en-tête. NG si non défini ou JSON est défini.

Exemple de code

Test.java


        String url = "https://www.googleapis.com/oauth2/v4/token";

		CloseableHttpClient httpclient = HttpClients.createDefault();

		HttpPost request = new HttpPost(url);
		List<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();
		parameters.add(new BasicNameValuePair("code", authorizationCode)); //Code d'autorisation obtenu ci-dessus
		parameters.add(new BasicNameValuePair("client_id", oAuthClientId)); //ID client des informations d'identification de l'API sur la console
		parameters.add(new BasicNameValuePair("client_secret", oAuthClientSecret)); //Client secret des informations d'identification de l'API sur la console
		parameters.add(new BasicNameValuePair("redirect_uri", "http://localhost:8080")); //URI de redirection approuvé que vous avez défini
		parameters.add(new BasicNameValuePair("grant_type", "authorization_code")); //Fixé

		HttpEntity entity = new UrlEncodedFormEntity(parameters);
		request.setEntity(entity);
		
		request.setHeader("Content-Type", "application/x-www-form-urlencoded");

		CloseableHttpResponse response = httpclient.execute(request);
		if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
		    String result = EntityUtils.toString(response.getEntity(), "UTF-8");
		    System.out.println(result);
		}
		response.close();

Champ de réponse: image.png

Maintenant que vous avez le jeton d'accès, vous pouvez obtenir les données de Google. Ceci est un exemple de définition d'un jeton d'accès dans l'en-tête. curl -H "Authorization: Bearer <access_token>" https://www.googleapis.com/drive/v2/files

Mise à jour du jeton d'accès à l'aide du jeton d'actualisation

Le jeton d'accès a une date d'expiration. Après une certaine période (60 minutes), il devient invalide. À ce stade, vous pouvez obtenir à nouveau le code d'autorisation, Il est courant de réémettre des jetons d'accès à l'aide de jetons d'actualisation, car cela est fastidieux pour l'utilisateur.

spécification

C'est la même chose qu'un jeton d'accès. image.png

image.png

Exemple de code

Test.java


        String url = "https://www.googleapis.com/oauth2/v4/token";

		HttpPost request = new HttpPost(url);
		List<BasicNameValuePair> parameters = new ArrayList<BasicNameValuePair>();
		parameters.add(new BasicNameValuePair("refresh_token", "xxxxxxx")); //Jeton d'actualisation que vous avez
		parameters.add(new BasicNameValuePair("client_id", oAuthClientId)); //ID client des informations d'identification de l'API sur la console
		parameters.add(new BasicNameValuePair("client_secret", oAuthClientSecret)); //Client secret des informations d'identification de l'API sur la console
		parameters.add(new BasicNameValuePair("redirect_uri", "http://localhost:8080")); //URI de redirection approuvé que vous avez défini
		parameters.add(new BasicNameValuePair("grant_type", "refresh_token")); //Fixé

		HttpEntity entity = new UrlEncodedFormEntity(parameters);
		request.setEntity(entity);
		
		request.setHeader("Content-Type", "application/x-www-form-urlencoded");

		CloseableHttpClient httpclient = HttpClients.createDefault();
		CloseableHttpResponse response = httpclient.execute(request);
		if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
		    String result = EntityUtils.toString(response.getEntity(), "UTF-8");
		    System.out.println(result);
		}
		response.close();

Ceci est un exemple de réponse. image.png

Comme indiqué dans l'exemple, il n'y a pas de jeton d'actualisation, donc si le jeton d'actualisation est également invalide, vous devrez recommencer à partir de l'obtention du code d'autorisation.

URL de référence: https://developers.google.com/identity/protocols/OAuth2WebServer

c'est tout

Recommended Posts

Jeton d'accès à l'API Google et jeton d'actualisation
Accordez un jeton d'accès avec la commande curl et POST l'API
Obtenez un jeton d'accès pour l'API Pocket
Intégration de la banque de données Google App Engine et de l'API de recherche
Méthode d'accès à l'API Guru Navi
Enregistrement facile des livres avec l'API et Rails de Google Livres
Procédure de transcription vocale à l'aide de Python et de l'API Google Cloud Speech
[API LINE Messaging] Émettre un jeton d'accès au canal v2.1 en Python
Les débutants de l'API Google Maps et de l'API Twitter ont créé "Tweet Map"
API Zabbix ceci et cela
Accédez à Google Drive avec Python
Conseils relatifs aux API Google Drive (Python)
Obtenez des conversions et des revenus avec l'API Google Analytics et faites un rapport à Slack
[Google Maps API] La carte n'est pas affichée et devient vide [Rails]
Émission de jetons d'authentification Firebase en Python et validation de jetons avec Fast API
[Ruby on Rails] Affichage et épinglage de GoolgeMAP à l'aide de l'API Google
J'ai essayé d'utiliser l'API de reconnaissance vocale docomo et l'API Google Speech en Java