2012-07-26 15 views
8

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

+1

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 –

+0

Sì, quello era il pezzo mancante, grazie per la risposta ho trovato la mia risposta da una domanda simile. – David

risposta

6

ho trovato una domanda simile come il mio: Can a Google Apps Admin manage users files with Drive SDK? alla mia, che mi ha aiutato a capire la risposta.

La documentazione cPanel è un po 'fuorviante in quanto si riferisce a consentire la chiave del consumatore e quindi aggiungendo il dominio alla schermata Gestisci accesso client API. Questo sembra essere valido per gdata api e non per la nuova API di Google Drive. Aggiungendo l'id del client come suggerito nell'altra domanda e concedendo l'accesso all'ambito Drive ora sono in grado di impersonare un utente.

+2

L'ID cliente assomiglia a questo xxxxxxxx.apps.googleusercontent.com Se non dove posso trovare l'ID del cliente? – DavidVdd

+1

L'ID cliente può essere trovato nella console api (https://code.google.com/apis/console/) – VoltaicShock

Problemi correlati