Мой проект - это искровой проект java, который я разместил на геройку. Часть проекта требует, чтобы я загрузил конкретный файл с моего диска Google в приложение. Мне удалось настроить все, когда приложение было запущено локально, но как только я развернул приложение, он перестал работать. Это было независимо от того, что, когда приложение выполнялось локально, я использовал идентификатор клиента Oauth2 типа other, и когда я развернул приложение, я создал новое однотипное веб-приложение.google drive Oauth 2.0 для java веб-приложения
Ниже приведен фрагмент аутентификации и загрузки кода:
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();
}
}
В настоящее время, когда я пытаюсь начать загрузку я получаю URL в Heroku регистрирует следующим образом:
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
Когда я попробуйте ввести URL-адрес в браузере. Я получаю сообщение об ошибке:
Error: redirect_uri_mismatch
Не могу найти качественного поэтажного репетитора ial при доступе к содержимому диска google в веб-приложении java, поэтому любая помощь будет устранена.
Является ли факт, что я запускал приложение локально, а затем перенес его в Heroku, не имеет импликации? Я спрашиваю, потому что идентификаторы клиентов могут быть для веб-приложений и других (для настольных приложений, у которых нет URL-адресов переадресации, например) и т. Д. Идентификатор клиента, который работал, был другого типа и, следовательно, не принимал URL-адреса переадресации. – Chognificent
Я не понимаю, почему вы изменили тип клиента. Разумеется, ваша заявка должна быть одинаковой при тестировании, поскольку она находится в производстве. Таким образом, стандартным подходом является просто наличие единого идентификатора клиента с URL-адресами переадресации как для вашей тестовой среды, так и для вашей производственной среды. Либо я неправильно понял, чего вы пытаетесь достичь, либо неправильно понимаете типы OAuth/client где-то на этом пути. – pinoyyid
Я изменил свой тип клиента, потому что тот, который я использовал (другой), который не разрешает URL-адрес переадресации, поэтому не работал. – Chognificent