Mon projet est un projet java spark que j'ai hébergé sur heroku. Une partie du projet nécessite que je télécharge un fichier particulier de mon disque google dans l'application. J'ai réussi à tout configurer lorsque mon application était en cours d'exécution mais dès que j'ai déployé l'application, elle a cessé de fonctionner. C'était indépendamment du fait que lorsque l'application était en cours d'exécution, j'ai utilisé un ID client Oauth2 de type autre et lorsque j'ai déployé l'application, j'ai créé un nouveau type d'application web.google drive Oauth 2.0 pour l'application web java
Voici un extrait de l'authentification et code de téléchargement:
public class AutoCalls {
/** Application name. */
private static final String APPLICATION_NAME = "calls-made";
private static final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty("target/classes/auth"), ".credentials/calls-made");
private static FileDataStoreFactory DATA_STORE_FACTORY;
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static HttpTransport HTTP_TRANSPORT;
private static final List<String> SCOPES = Arrays.asList(DriveScopes.DRIVE);
static {
try {
HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
} catch (GeneralSecurityException | IOException t) {
System.exit(1);
}
}
public static void startDownload() throws IOException, ParseException {
Drive serv = getDriveService();
// drive stuff deleted
}
public static Credential authorize() throws IOException {
InputStream in = new FileInputStream("target/classes/auth/client_secret_*****************************************.apps.googleusercontent.com.json");
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(DATA_STORE_FACTORY)
.setAccessType("offline")
.build();
Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
System.out.println("Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
return credential;
}
public static Drive getDriveService() throws IOException {
Credential credential = authorize();
return new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
.setApplicationName(APPLICATION_NAME)
.build();
}
}
Actuellement lorsque je tente de lancer le téléchargement, je reçois une URL dans le Heroku enregistre un suit:
2017-02-20T10:32:28.656820+00:00 app[web.1]: Please open the following address in your browser:
2017-02-20T10:32:28.656908+00:00 app[web.1]: https://accounts.google.com/o/oauth2/auth?access_type=offline&client_id=************-vvdi7u6bmp1vc90sdidtnuiftdi1t49c.apps.googleusercontent.com&redirect_uri=http://localhost:48085/Callback&response_type=code&scope=https://www.googleapis.com/auth/drive
Quand je essayez d'ouvrir l'URL dans un navigateur Je reçois une erreur:
Error: redirect_uri_mismatch
Je ne trouve pas de bon tutorat étape par étape ial sur l'accès au contenu du disque google sur une application web java afin que toute aide soit arreiciated.
Est-ce que le fait que j'utilisais l'application localement l'ai déplacé à Heroku n'a pas d'implication? Je demande parce que les ID de client peuvent être pour des applications Web et autres (pour les applications de bureau, qui n'ont pas d'URL de redirection par exemple) etc. L'ID client qui fonctionnait était de type autre et n'acceptait donc pas les URL de redirection. – Chognificent
Je ne comprends pas pourquoi vous avez changé le type de client. Votre application doit sûrement être la même dans les tests que dans la production. L'approche standard consiste donc simplement à avoir un seul identifiant de client avec des URL de redirection pour votre environnement de test et votre environnement de production. Soit j'ai mal compris ce que vous essayez de réaliser, soit vous avez mal compris les types d'OAuth/client quelque part en cours de route. – pinoyyid
J'ai changé mon type de client parce que celui que j'utilisais (autre) ne permettait pas une URL de redirection et ne fonctionnait donc pas. – Chognificent