OAuth Google-API für Java nicht in der Lage, die Identität von Benutzer
Ich würde gerne einen Benutzer zu imitieren und Dateien hinzufügen, um die Benutzer von Google Drive auf Ihren Namen von einem server-Prozess. Ich habe setup ein service-Konto und kann erfolgreich auf das Laufwerk zugreifen, da der service-Konto hinzufügen und auflisten von Dateien, etc. mit dem folgenden code:
/** 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();
public static void main(String[] args) {
try {
GoogleCredential credential =
new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId("[email protected]")
.setServiceAccountScopes(DriveScopes.DRIVE)
.setServiceAccountPrivateKeyFromP12File(new File("c:/junk/key.p12"))
.build();
Drive drive = new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).build();
drive.files().list().execute();
} catch (Exception e) {
e.printStackTrace();
}
Dieser Werke jedoch gibt nur Dateien, die verbunden sind, was ich annehme, ist im Zusammenhang mit der Dienst-Konten-Laufwerk (?).
Entsprechend der JavaDoc, GoogleCredential kann auch verwendet werden, um die Identität eines Benutzers durch hinzufügen der service-Konto-Benutzer E-Mail-Adresse wie folgt:
GoogleCredential credential =
new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId("[email protected]")
.setServiceAccountScopes(DriveScopes.DRIVE)
.setServiceAccountPrivateKeyFromP12File(new File("c:/junk/key.p12"))
.setServiceAccountUser("[email protected]") //<-- impersonate user a
.build();
Jedoch, wenn dieser code ausgeführt, wird die folgende Ausnahme ausgelöst:
com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
"error" : "access_denied"
}
at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:103)
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:303)
at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:323)
at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:340)
at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:508)
at com.google.api.client.auth.oauth2.Credential.intercept(Credential.java:260)
at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:796)
at com.google.api.client.googleapis.json.GoogleJsonResponseException.execute(GoogleJsonResponseException.java:198)
at com.google.api.client.googleapis.services.GoogleClient.executeUnparsed(GoogleClient.java:237)
at com.google.api.client.http.json.JsonHttpRequest.executeUnparsed(JsonHttpRequest.java:207)
at com.google.api.services.drive.Drive$Files$List.execute(Drive.java:1071)
Bin ich fehlt ein Schritt-oder Konfigurationseinstellung?
Dank,
David
- Wie hast du gewähren, dass service-Konto zugreifen, um die Identität von Benutzern, die auf Ihre domain? Wussten Sie, fügen Sie die client-ID und das entsprechende Bereiche in der OAuth-Abschnitt der Google Apps control panel? - support.google.com/a/bin/answer.py?hl=en&Antwort=162106
- Ja, das war das fehlende Stück, danke für die Antwort, die ich fand meine Antwort aus einer ähnlichen Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich eine ähnliche Frage wie meine: Kann ein Google Apps-Admin-Benutzer verwalten von Dateien mit dem Drive SDK? zu mir, das hat mir geholfen, herauszufinden, die Antwort.
CPanel Dokumentation ist ein wenig irreführend, da es bezieht sich auf den consumer-key aktivieren und dann das hinzufügen der Domäne zu Verwalten " API-client-Zugriff-Bildschirm. Dies scheint gültig zu sein für die gdata-api und nicht die neue Google Drive-api. Durch das hinzufügen der client-id, wie bereits in der anderen Frage und die Gewährung von Zugriff auf das Laufwerk, Geltungsbereich ich bin jetzt in der Lage, um einen Benutzer zu imitieren.
Bekommen Ihr admin hinzufügen von Bereichen zu xxxxx.apps.googleusercontent.com über das admin-panel:
Habe ich noch folgende arbeiten auf Tabellen:
https://www.googleapis.com/auth/drive
https://docs.google.com/feeds
https://spreadsheets.google.com/feeds