Authentifizierung der Google-API mit einem Dienstkonto über die Java-API
Ich versuche, mit der oauth-API ein Google-Dienstkonto über die Java-API zu authentifizieren. Ich hoffe, dass ich damit auf Google Bigquery zugreifen kann. Ich erhalte eine "ungültige Gewährung" von meinen API-Anfragen.
Hier ist der Code, der eine Kopie eines grundlegenden Authentifizierungsbeispiels ist (das nicht für Bigquery, sondern für eine andere Google-API bestimmt war):
/** Global instance of the HTTP transport. */
private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
/** Global instance of the JSON factory. */
private static final JsonFactory JSON_FACTORY = new JacksonFactory();
private static Bigquery bigquery;
public ServiceAccountExample() {
try {
try {
GoogleCredential credential = new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes(BigqueryScopes.BIGQUERY)
.setServiceAccountPrivateKeyFromP12File(new File("GoogleBigQuery-privatekey.p12"))
//.setRefreshListeners(refreshListeners)
//.setServiceAccountUser("email.com")
.build();
credential.refreshToken();
bigquery = new Bigquery.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
//.setApplicationName("GoogleBigQuery/1.0")
.build();
listDatasets(bigquery, "publicdata");
return;
} catch (IOException e) {
System.err.println(e.getMessage());
}
} catch (Throwable t) {
t.printStackTrace();
}
}
SERVICE_ACCOUNT_EMAIL ist die E-Mail-Adresse des Formulars: [email protected]
Wenn ich die credential.refreshToken () -Zeile entferne, schlägt sie in den listsDatasets beim ersten Aufruf von Bigquery fehl. Andernfalls schlägt sie in credential.refreshToken () mit demselben Fehler fehl.
Akzeptiert BigQuery keine Service Account-Authentifizierung?
Ich glaube, ich habe alles richtig über die API-Konsole gemacht. Ich habe:
Zugriff auf die Big Query API aktiviert.Erstellt ein Dienstkonto auf der Registerkarte "API-Zugriff".Habe meinen privaten Schlüssel heruntergeladen (auf den im obigen Code verwiesen wird).Wenn mein Dienstkonto angegeben ist, kann der Benutzer den Zugriff auf die Registerkarte "Teams" bearbeiten.Abrechnung aktiviert.Habe ich etwas verpasst Muss ich noch etwas tun?
Vielen Dank..