Domanda

Vorrei impersonare un utente e aggiungere file agli utenti Google Drive per loro conto da un processo del server.Ho installato un account di servizio e posso accedere con successo all'unità come aggiunta di account di servizio e elenco dei file, ecc. Utilizzo del seguente codice:

  /** 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("XXXXX@developer.gserviceaccount.com")
                  .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();
  }
.

Funziona, tuttavia restituisce solo i file associati a ciò che assumere è associato all'unità Account di servizio (?).

Secondo Javadoc, GoogleCrereental può anche essere utilizzato per impersonare un utente aggiungendo l'indirizzo e-mail degli utenti dell'account di servizio come segue:

        GoogleCredential credential = 
                new GoogleCredential.Builder().setTransport(HTTP_TRANSPORT)
                  .setJsonFactory(JSON_FACTORY)
                  .setServiceAccountId("XXXXX@developer.gserviceaccount.com")
                  .setServiceAccountScopes(DriveScopes.DRIVE)
                  .setServiceAccountPrivateKeyFromP12File(new File("c:/junk/key.p12"))
                  .setServiceAccountUser("usera@domain.com") //<-- impersonate user a
                  .build();
.

Tuttavia, quando si esegue questo codice, viene lanciata la seguente eccezione:

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)
.

AM mi manca un passo o un'impostazione di configurazione?

Grazie, David

È stato utile?

Soluzione

Ho trovato una domanda simile come mia: Può un amministratore di Google Amministratore gestire i file degli utenti con Drive SDK? per il mio che mi ha aiutato a capire la risposta.

La documentazione CPANEL è un po 'fuorviante in quanto si riferisce all'avanzamento della chiave dei consumatori e aggiungendo il dominio alla schermata Gestione del client API API.Questo sembra essere valido per l'API GData e non la nuova API di Google Drive.Aggiungendo l'ID del cliente come suggerito nell'altra domanda e concedere l'accesso allo scope del drive, ora sono in grado di impersonare un utente.

Altri suggerimenti

Ottieni il tuo amministratore per aggiungere scope a xxxxx.apps.googleuseContent.com tramite Pannello Admin:

Ho aggiunto quanto segue per lavorare sui fogli di calcolo:


https://www.googleapis.com/auth/Drive
https://docs.google.com/feeds
https://spreadsheets.google.com/feeds

Delegate OAuth Permissions Scope

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top