0

Je reçois le jeton d'accès et le jeton d'actualisation comme nulle lorsque j'exécute mon code. Il n'y a pas d'erreur de compilation. Je ne comprends pas pourquoi cela arrive. aide de plz.Le jeton d'accès et de rafraîchissement est nul dans google drive api avec le compte de service

Je suis cet exemple à partir d'échantillons fournis sur le site officiel.

En fait, je veux faire l'autorisation de serveur à serveur qui peut être fait en utilisant le compte de service à google drive. Je ne veux même pas montrer consentement écran à l'utilisateur. Je suivais la documentation du lecteur de Google qui est à

https://developers.google.com/identity/protocols/OAuth2ServiceAccount

Mon code est:

public class TFT { 

private static final String ApplicationName = "Boston"; 
private static final String serviceAccountEmailAddress = "[email protected]"; 
private static final String serviceAccountUser = "[email protected]"; 

private static List<File> retrieveAllFiles(Drive service) throws IOException { 
    List<File> result = new ArrayList<>(); 
    Files.List request = service.files().list(); 

    do { 
     FileList files = request.execute(); 

     result.addAll(files.getFiles()); 

     request.setPageToken(files.getNextPageToken()); 

    } while (request.getPageToken() != null && request.getPageToken().length() > 0); 
    return result; 
} 

public static Drive getDriveService() throws IOException { 

    HttpTransport httpTransport = new NetHttpTransport(); 
    JacksonFactory jsonFactory = new JacksonFactory(); 

    GoogleCredential credential = null; 

    try { 
     credential = new GoogleCredential.Builder() 
       .setTransport(httpTransport) 
       .setJsonFactory(jsonFactory) 
       .setServiceAccountId(serviceAccountEmailAddress) 
       .setServiceAccountScopes(DriveScopes.all()) 
       .setServiceAccountUser(serviceAccountUser) 
       .setServiceAccountPrivateKeyFromP12File(new java.io.File("/home/xpointers/Downloads/Boston-2b55ddf4a5c8.p12")) 
       .build(); 

    } catch (GeneralSecurityException | IOException e) { 
     e.printStackTrace(); 
    } 

    Drive service = new Drive.Builder(httpTransport, jsonFactory, credential).setApplicationName(ApplicationName) 
      .build(); 
    return service; 
} 

private java.io.File getp12File(String fileName) { 


    ClassLoader classLoader = getClass().getClassLoader(); 
    return new java.io.File(classLoader.getResource(fileName).getFile()); 

} 

public static void main(String[] args) { 

    try { 

     Drive service = getDriveService(); 

     List<File> files; 

     files = retrieveAllFiles(service); 

     System.out.println(files); 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

}

Répondre

0

Vous pouvez consulter cette thread qui suggère d'utiliser credential.refreshToken();.

Nous devons appeler credential.refreshToken();
puis
String token=credential.getAccessToken();

Références:

+0

Vos liens m'ont aidé un peu. Merci. Besoin de savoir une chose de plus, pouvez-vous me dire d'où je suis censé prendre ce serviceComptoirEmailAdresse et serviceAccountUser – Vivek