Als ich neulich die Google-API verwendet habe, habe ich einen Fehler "Nicht gefunden" und einen Fehler "Bad Request" übersehen, sodass ich sie als Memo zusammenfassen werde.
https://console.developers.google.com/apis/dashboard
Wählen Sie diese Option, wenn der Benutzer der Autorisierung auf dem Bildschirm zustimmt
Nach Eingabe des Anwendungstyps, des Namens und des genehmigten Umleitungs-URI wurden eine Client-ID und ein Client-Geheimnis generiert.
Holen Sie sich Zugriffstoken im JSON-Format hinter den Kulissen ohne Bildschirmbedienung. Wählen Sie dies für die Stapelverarbeitung
Laden Sie die Datei im JSON-Format herunter
Stellen Sie Client und Scoop ein und greifen Sie über die URL zu
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=Kunden-ID oben erhalten
Wenn Sie mit Google einverstanden sind, können Sie den Autorisierungscode von der URL erhalten.
http://localhost:8080/?code=xxxxxxxxxxxx&scope=yyyyyyyyyyy
Punkt 1: POST-Methode. NG mit GET-Methode Punkt 2: Setzen Sie im Header "Content-Type: application / x-www-form-urlencoded". NG, wenn nicht gesetzt oder JSON gesetzt ist.
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)); //Autorisierungscode oben erhalten
parameters.add(new BasicNameValuePair("client_id", oAuthClientId)); //Client-ID der API-Anmeldeinformationen auf der Konsole
parameters.add(new BasicNameValuePair("client_secret", oAuthClientSecret)); //Client-Geheimnis der API-Anmeldeinformationen auf der Konsole
parameters.add(new BasicNameValuePair("redirect_uri", "http://localhost:8080")); //Genehmigter Umleitungs-URI, den Sie festgelegt haben
parameters.add(new BasicNameValuePair("grant_type", "authorization_code")); //Fest
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();
Antwortfeld:
Nachdem Sie über das Zugriffstoken verfügen, können Sie die Daten von Google abrufen.
Dies ist ein Beispiel für das Festlegen eines Zugriffstokens im Header.
curl -H "Authorization: Bearer <access_token>" https://www.googleapis.com/drive/v2/files
Das Zugriffstoken hat ein Ablaufdatum. Nach einer bestimmten Zeit (60 Minuten) wird es ungültig. Zu diesem Zeitpunkt erhalten Sie möglicherweise erneut den Autorisierungscode. Es ist üblich, Zugriffstoken mithilfe von Aktualisierungstoken erneut auszugeben, da dies für den Benutzer umständlich ist.
Es ist dasselbe wie ein Zugriffstoken.
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")); //Aktualisieren Sie das Token, das Sie haben
parameters.add(new BasicNameValuePair("client_id", oAuthClientId)); //Client-ID der API-Anmeldeinformationen auf der Konsole
parameters.add(new BasicNameValuePair("client_secret", oAuthClientSecret)); //Client-Geheimnis der API-Anmeldeinformationen auf der Konsole
parameters.add(new BasicNameValuePair("redirect_uri", "http://localhost:8080")); //Genehmigter Umleitungs-URI, den Sie festgelegt haben
parameters.add(new BasicNameValuePair("grant_type", "refresh_token")); //Fest
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();
Dies ist ein Antwortbeispiel.
Wie im Beispiel gezeigt, gibt es kein Aktualisierungstoken. Wenn das Aktualisierungstoken also ebenfalls ungültig ist, müssen Sie zunächst den Autorisierungscode abrufen.
Referenz-URL: https://developers.google.com/identity/protocols/OAuth2WebServer
das ist alles
Recommended Posts