Ошибка чтения учетных данных из потока, поле «тип» не указано. ⇐ JAVA
-
Anonymous
Ошибка чтения учетных данных из потока, поле «тип» не указано.
Я работаю над Java-приложением, которое использует библиотеку Google Auth для аутентификации с помощью API Календаря Google. Я загрузил файл credentials.json для своих учетных данных OAuth2 из Google Cloud Console и загружаю этот файл в свое приложение следующим образом:
InputStream in = GoogleCalendarExample.class.getResourceAsStream(CREDENTIALS_FILE_PATH); Учетные данные GoogleCredentials = GoogleCredentials.fromStream(in).createScoped(SCOPES); Однако, когда я пытаюсь запустить приложение, я получаю следующую ошибку:
Исключение в потоке «main» java.io.IOException: ошибка чтения учетных данных из потока, поле «тип» не указано. по адресу com.google.auth.oauth2.GoogleCredentials.fromStream(GoogleCredentials.java:170) по адресу com.google.auth.oauth2.GoogleCredentials.fromStream(GoogleCredentials.java:143) по адресу pl.szylak.googleservices.GoogleCalendarExample.main(GoogleCalendarExample.java:32) Я проверил свой файл credentials.json, и он не содержит поля type. Вместо этого он включает объект installed с client_id, client_secret и другими деталями:
{ "установлен": { "client_id": "CLIENT_ID.apps.googleusercontent.com", "project_id": "PROJECT_ID", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_secret": "CLIENT_SECRET", "redirect_uris": ["urn:ietf:wg:oauth:2.0:oob", "http://localhost"] } } Я читал, что библиотека Google Auth должна без проблем обрабатывать этот тип файла учетных данных, поэтому я не уверен, почему я вижу эту ошибку. Кто-нибудь еще сталкивался с этой проблемой и знает ли кто-нибудь, как ее решить?
Я изменил значения заполнителей в Credentials.json.
Это мой простой Java-код для добавления событий в календарь.
пакет pl.szylak.googleservices; импортировать com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; импортировать com.google.api.client.json.JsonFactory; импортировать com.google.api.client.json.jackson2.JacksonFactory; импортировать com.google.api.client.util.DateTime; импортировать com.google.api.services.calendar.Calendar; импортировать com.google.api.services.calendar.CalendarScopes; импортировать com.google.api.services.calendar.model.Event; импортировать com.google.api.services.calendar.model.EventDateTime; импортировать com.google.auth.http.HttpCredentialsAdapter; импортировать com.google.auth.oauth2.GoogleCredentials; импортировать java.io.IOException; импортировать java.io.InputStream; импортировать java.security.GeneralSecurityException; импортировать java.util.Collections; общественный класс GoogleCalendarExample { частная статическая окончательная строка APPLICATION_NAME = "Краткое руководство по Java Calendar API Google"; частный статический окончательный JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); частная статическая окончательная строка TOKENS_DIRECTORY_PATH = «токены»; частная статическая финальная строка CREDENTIALS_FILE_PATH = "/resources/credentials.json"; частный статический окончательный java.util.List\ SCOPES = Collections.singletonList(CalendarScopes.CALENDAR); частная статическая служба com.google.api.services.calendar.Calendar; public static void main(String... args) выдает IOException, GeneralSecurityException { // Создаем новую авторизованную клиентскую службу API. окончательный com.google.api.client.http.javanet.NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); InputStream in = GoogleCalendarExample.class.getResourceAsStream(CREDENTIALS_FILE_PATH); Учетные данные GoogleCredentials = GoogleCredentials.fromStream(in).createScoped(SCOPES); сервис = новый com.google.api.services.calendar.Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, новый HttpCredentialsAdapter(credentials)) .setApplicationName(ИМЯ_ПРИЛОЖЕНИЯ) .строить(); // Вызов API Календаря Google и добавление события. добавитьСобытие(); } Private static void addEvent() выдает IOException { Событие событие = новое событие() .setSummary("Google I/O 2025") .setLocation("800 Howard St., Сан-Франциско, Калифорния 94103") .setDescription("Шанс узнать больше о продуктах Google для разработчиков."); EventDateTime start = новый EventDateTime() .setDateTime(new DateTime("2025-05-28T09:00:00-07:00")) .setTimeZone("Америка/Лос-Анджелес"); event.setStart(старт); Конец EventDateTime = новый EventDateTime() .setDateTime(new DateTime("2025-05-28T17:00:00-07:00")) .setTimeZone("Америка/Лос-Анджелес"); event.setEnd(конец); Строка CalendarId = "Основной"; событие = service.events().insert(calendarId, event).execute(); System.out.printf("Событие создано: %s\n", event.getHtmlLink()); } }
Я работаю над Java-приложением, которое использует библиотеку Google Auth для аутентификации с помощью API Календаря Google. Я загрузил файл credentials.json для своих учетных данных OAuth2 из Google Cloud Console и загружаю этот файл в свое приложение следующим образом:
InputStream in = GoogleCalendarExample.class.getResourceAsStream(CREDENTIALS_FILE_PATH); Учетные данные GoogleCredentials = GoogleCredentials.fromStream(in).createScoped(SCOPES); Однако, когда я пытаюсь запустить приложение, я получаю следующую ошибку:
Исключение в потоке «main» java.io.IOException: ошибка чтения учетных данных из потока, поле «тип» не указано. по адресу com.google.auth.oauth2.GoogleCredentials.fromStream(GoogleCredentials.java:170) по адресу com.google.auth.oauth2.GoogleCredentials.fromStream(GoogleCredentials.java:143) по адресу pl.szylak.googleservices.GoogleCalendarExample.main(GoogleCalendarExample.java:32) Я проверил свой файл credentials.json, и он не содержит поля type. Вместо этого он включает объект installed с client_id, client_secret и другими деталями:
{ "установлен": { "client_id": "CLIENT_ID.apps.googleusercontent.com", "project_id": "PROJECT_ID", "auth_uri": "https://accounts.google.com/o/oauth2/auth", "token_uri": "https://oauth2.googleapis.com/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_secret": "CLIENT_SECRET", "redirect_uris": ["urn:ietf:wg:oauth:2.0:oob", "http://localhost"] } } Я читал, что библиотека Google Auth должна без проблем обрабатывать этот тип файла учетных данных, поэтому я не уверен, почему я вижу эту ошибку. Кто-нибудь еще сталкивался с этой проблемой и знает ли кто-нибудь, как ее решить?
Я изменил значения заполнителей в Credentials.json.
Это мой простой Java-код для добавления событий в календарь.
пакет pl.szylak.googleservices; импортировать com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; импортировать com.google.api.client.json.JsonFactory; импортировать com.google.api.client.json.jackson2.JacksonFactory; импортировать com.google.api.client.util.DateTime; импортировать com.google.api.services.calendar.Calendar; импортировать com.google.api.services.calendar.CalendarScopes; импортировать com.google.api.services.calendar.model.Event; импортировать com.google.api.services.calendar.model.EventDateTime; импортировать com.google.auth.http.HttpCredentialsAdapter; импортировать com.google.auth.oauth2.GoogleCredentials; импортировать java.io.IOException; импортировать java.io.InputStream; импортировать java.security.GeneralSecurityException; импортировать java.util.Collections; общественный класс GoogleCalendarExample { частная статическая окончательная строка APPLICATION_NAME = "Краткое руководство по Java Calendar API Google"; частный статический окончательный JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance(); частная статическая окончательная строка TOKENS_DIRECTORY_PATH = «токены»; частная статическая финальная строка CREDENTIALS_FILE_PATH = "/resources/credentials.json"; частный статический окончательный java.util.List\ SCOPES = Collections.singletonList(CalendarScopes.CALENDAR); частная статическая служба com.google.api.services.calendar.Calendar; public static void main(String... args) выдает IOException, GeneralSecurityException { // Создаем новую авторизованную клиентскую службу API. окончательный com.google.api.client.http.javanet.NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); InputStream in = GoogleCalendarExample.class.getResourceAsStream(CREDENTIALS_FILE_PATH); Учетные данные GoogleCredentials = GoogleCredentials.fromStream(in).createScoped(SCOPES); сервис = новый com.google.api.services.calendar.Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, новый HttpCredentialsAdapter(credentials)) .setApplicationName(ИМЯ_ПРИЛОЖЕНИЯ) .строить(); // Вызов API Календаря Google и добавление события. добавитьСобытие(); } Private static void addEvent() выдает IOException { Событие событие = новое событие() .setSummary("Google I/O 2025") .setLocation("800 Howard St., Сан-Франциско, Калифорния 94103") .setDescription("Шанс узнать больше о продуктах Google для разработчиков."); EventDateTime start = новый EventDateTime() .setDateTime(new DateTime("2025-05-28T09:00:00-07:00")) .setTimeZone("Америка/Лос-Анджелес"); event.setStart(старт); Конец EventDateTime = новый EventDateTime() .setDateTime(new DateTime("2025-05-28T17:00:00-07:00")) .setTimeZone("Америка/Лос-Анджелес"); event.setEnd(конец); Строка CalendarId = "Основной"; событие = service.events().insert(calendarId, event).execute(); System.out.printf("Событие создано: %s\n", event.getHtmlLink()); } }
Мобильная версия