vorrei rappresentare un utente e aggiungere i file per gli utenti di Google Drive per loro conto da un processo server. Ho installato un account di servizio e può accedere con successo dell'unità come l'account di servizio l'aggiunta e l'elenco dei file, ecc utilizzando il seguente codice:OAuth Google API per Java in grado di rappresentare l'utente
/** 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();
}
Questo funziona, ma restituisce solo i file che sono associati a quello che presumo è associato all'unità degli account di servizio (?).
Secondo il JavaDoc, GoogleCredential può anche essere usato per rappresentare un utente con l'aggiunta del utenti di account e-mail di servizio come segue:
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();
Tuttavia, quando si esegue questo codice, la seguente eccezione viene generata:
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)
mi manca un'impostazione di passo o di configurazione?
Grazie, David
In che modo hai concesso l'accesso all'account di servizio per impersonare utenti sul tuo dominio? Hai aggiunto l'ID cliente e gli ambiti appropriati nella sezione OAuth del pannello di controllo di Google Apps? - http://support.google.com/a/bin/answer.py?hl=it&answer=162106 –
Sì, quello era il pezzo mancante, grazie per la risposta ho trovato la mia risposta da una domanda simile. – David