Ошибка чтения учетных данных из потока, поле «тип» не указано.JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Ошибка чтения учетных данных из потока, поле «тип» не указано.

Сообщение Anonymous »

Я работаю над приложением Java, которое использует библиотеку Google Auth для аутентификации с помощью API Календаря Google. Я скачал файл Credentials.json для своих учетных данных OAuth2 из Google Cloud Console и загружаю этот файл в свое приложение следующим образом:
InputStream in = GoogleCalendarExample.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
GoogleCredentials credentials = GoogleCredentials.fromStream(in).createScoped(SCOPES);

Однако, когда я пытаюсь запустить приложение, я получаю следующую ошибку:
Exception in thread "main" java.io.IOException: Error reading credentials from stream, 'type' field not specified.
at com.google.auth.oauth2.GoogleCredentials.fromStream(GoogleCredentials.java:170)
at com.google.auth.oauth2.GoogleCredentials.fromStream(GoogleCredentials.java:143)
at pl.szylak.googleservices.GoogleCalendarExample.main(GoogleCalendarExample.java:32)

Я проверил свой файл учетных данных.json, и он не содержит поля типа. Вместо этого он включает установленный объект с client_id, client_secret и другими сведениями:
{
"installed": {
"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-код для добавления событий в календарь.
package pl.szylak.googleservices;

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.util.DateTime;
import com.google.api.services.calendar.Calendar;
import com.google.api.services.calendar.CalendarScopes;
import com.google.api.services.calendar.model.Event;
import com.google.api.services.calendar.model.EventDateTime;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;

import java.io.IOException;
import java.io.InputStream;
import java.security.GeneralSecurityException;
import java.util.Collections;

public class GoogleCalendarExample {
private static final String APPLICATION_NAME = "Google Calendar API Java Quickstart";
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static final String TOKENS_DIRECTORY_PATH = "tokens";
private static final String CREDENTIALS_FILE_PATH = "/resources/credentials.json";
private static final java.util.List\ SCOPES = Collections.singletonList(CalendarScopes.CALENDAR);

private static com.google.api.services.calendar.Calendar service;

public static void main(String... args) throws IOException, GeneralSecurityException {
// Build a new authorized API client service.
final com.google.api.client.http.javanet.NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
InputStream in = GoogleCalendarExample.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
GoogleCredentials credentials = GoogleCredentials.fromStream(in).createScoped(SCOPES);
service = new com.google.api.services.calendar.Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, new HttpCredentialsAdapter(credentials))
.setApplicationName(APPLICATION_NAME)
.build();

// Call the Google Calendar API and add an event.
addEvent();
}

private static void addEvent() throws IOException {
Event event = new Event()
.setSummary("Google I/O 2025")
.setLocation("800 Howard St., San Francisco, CA 94103")
.setDescription("A chance to learn more about Google's developer products.");

EventDateTime start = new EventDateTime()
.setDateTime(new DateTime("2025-05-28T09:00:00-07:00"))
.setTimeZone("America/Los_Angeles");
event.setStart(start);

EventDateTime end = new EventDateTime()
.setDateTime(new DateTime("2025-05-28T17:00:00-07:00"))
.setTimeZone("America/Los_Angeles");
event.setEnd(end);

String calendarId = "primary";
event = service.events().insert(calendarId, event).execute();
System.out.printf("Event created: %s\n", event.getHtmlLink());
}

}


Подробнее здесь: https://stackoverflow.com/questions/766 ... -specified
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»