Question

Je voudrais imiter un utilisateur et ajouter des fichiers aux utilisateurs Google Drive en leur nom à partir d'un processus de serveur.J'ai configuré un compte de service et peut accéder avec succès au lecteur en tant que compte de service Ajout et liste des fichiers, etc. à l'aide du code suivant:

  /** 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();
  }

Ceci fonctionne, cependant ne renvoie que des fichiers associés à ce que je suppose est associé au lecteur de comptes de service (?).

Selon le Javadoc, GoogleCredential peut également être utilisé pour imiter un utilisateur en ajoutant l'adresse électronique des utilisateurs de compte de service comme suit:

        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();

Toutefois, lors de l'exécution de ce code, l'exception suivante est lancée:

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)

Suis je manque un réglage d'étape ou de configuration?

merci, David

Était-ce utile?

La solution

J'ai trouvé une question similaire comme la mine: Vous pouvez utiliser une application Google Apps gérer les fichiers d'utilisateurs avec le lecteur SDK? au mien qui m'a aidé à comprendre la réponse.

La documentation cpanel est un peu trompeuse car elle fait référence à la clé de la consommation, puis en ajoutant le domaine à l'écran Gérer l'accès client API.Cela semble être valable pour l'API GDATA et non la nouvelle API Google Drive.En ajoutant l'ID client comme suggéré dans l'autre question et en accordant accès à la portée du lecteur, je suis maintenant en mesure d'imiter un utilisateur.

Autres conseils

Obtenez votre administrateur pour ajouter des étendues à xxxxx.apps.googleuserercontent.com via un panneau d'administration:

J'ai ajouté ce qui suit pour travailler sur les feuilles de calcul:


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

Délégué des autorisations OAuth Portée

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top