Olá galera, primeiro gostaria de explicar com oque estou trabalhando.
Tenho um método de backup que utiliza a API OAuth 2.0 juntamente com o Google Drive.
Para que o backup funcione precisa do Token, e este Token tem um vencimento de 6 em 6 meses que por sinal descobri que no código não esta tratando este vencimento. Com isso começou os problemas…
Com bastante pesquisa encontrei o “RefreshTokenRequest” seria a solução para isso.
Aqui esta o método:
public void refreshAccessToken() throws IOException, Exception {
try {
//Pegando DataStoreFactory
httpTransport = GoogleNetHttpTransport.newTrustedTransport();
dataStoreFactory = new FileDataStoreFactory(new java.io.File(System.getProperty("user.home"), ".store/drive_sample"));
//Instanciando o clientSecrets para pegar os dados que precisa no RefreshToken
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,
new InputStreamReader(Upload.class.getResourceAsStream("/Backup/client_secrets.json")));
//Intanciando credential para pegar RefreshToken.
Credential credential = authorize();
//Ignorem estas variaveis, estava usando em outro método...
String token = clientSecrets.getDetails().getTokenUri();
String clientId = clientSecrets.getDetails().getClientId();
String clienteSecret = clientSecrets.getDetails().getClientSecret();
//Gerando refresh do token
RefreshTokenRequest req = new RefreshTokenRequest(httpTransport, JSON_FACTORY, new GenericUrl(
clientSecrets.getDetails().getTokenUri()), credential.getRefreshToken());
req.set("client_id", clientSecrets.getDetails().getClientId());
req.set("client_secret", clientSecrets.getDetails().getClientSecret());
TokenResponse response = req.execute();
//GoogleTokenResponse response = new GoogleRefreshTokenRequest(httpTransport, JSON_FACTORY, token,
// clientId, clienteSecret).execute();
System.out.println("Access token: " + response.getAccessToken());
} catch (TokenResponseException e) {
e.printStackTrace();
if (e.getDetails() != null) {
System.err.println("Error: " + e.getDetails().getError());
if (e.getDetails().getErrorDescription() != null) {
System.err.println(e.getDetails().getErrorDescription());
}
if (e.getDetails().getErrorUri() != null) {
System.err.println(e.getDetails().getErrorUri());
}
} else {
System.err.println(e.getMessage());
}
}
}
Mesmo utilizando o método o erro continuou a persistir.
Pelo meu conhecimento o código esta certo, pois fiz várias pesquisas e esta bem parecido com de outras pessoas.
Este é o erro que esta aparecendo:
================== Criando repositório ==================
abr 26, 2018 1:29:25 PM com.google.api.client.util.store.FileDataStoreFactory setPermissionsToOwnerOnly
ADVERTÊNCIA: unable to change permissions for everybody: C:\Users\Luiz-PC\.store\drive_sample
abr 26, 2018 1:29:25 PM com.google.api.client.util.store.FileDataStoreFactory setPermissionsToOwnerOnly
ADVERTÊNCIA: unable to change permissions for owner: C:\Users\Luiz-PC\.store\drive_sample
java.io.BufferedInputStream@1158d832
com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
{
"error" : "invalid_grant",
"error_description" : "Bad Request"
}
java.io.BufferedInputStream@41e29ba
at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105)
at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287)
at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307)
at Backup.Upload.refreshAccessToken(Upload.java:287)
at Backup.Upload.iniciaUpload(Upload.java:181)
at Backup.FrmBackup$1.run(FrmBackup.java:58)
Error: invalid_grant
Bad Request
abr 26, 2018 1:29:33 PM com.google.api.client.util.store.FileDataStoreFactory setPermissionsToOwnerOnly
ADVERTÊNCIA: unable to change permissions for everybody: C:\Users\Luiz-PC\.store\drive_sample
abr 26, 2018 1:29:33 PM com.google.api.client.util.store.FileDataStoreFactory setPermissionsToOwnerOnly
ADVERTÊNCIA: unable to change permissions for owner: C:\Users\Luiz-PC\.store\drive_sample
Galera já estou a muito tempo procurando sobre este erro e tudo que encontro não resolve meu problema, se alguém puder me ajudar ficarei muito grato.
Obrigado.