YouTube API v.3 с GoogleCredential (OAuth2): мои учетные данные YouTube получают недостаточное разрешение при создании списка воспроизведения или загрузке видео

Следующий код отлично работает, когда я ищу видео с помощью Google YouTube API (версия 3), но при попытке:

Playlist youTubePlaylist = new Playlist();
youTubePlaylist.setSnippet(playlistSnippet);
youTubePlaylist.setStatus(playlistStatus);
YouTube.Playlists.Insert command = youTube.playlists().insert("snippet,status", youTubePlaylist);
youTubePlaylist.setKey("AI...1IU");
youTubePlaylist.execute();

На этапе учетных данных я получаю accessToken, но происходит сбой на youTubePlaylist.execute():

{
  "access_token" : "ya29...DSoQ",
  "expires_in" : 3600,
  "token_type" : "Bearer"
}

com.google.api.client.googleapis.json.GoogleJsonResponseException: 403 Forbidden
{
  "code" : 403,
  "errors" : [ {
    "domain" : "global",
    "message" : "Insufficient Permission",
    "reason" : "insufficientPermissions"
  } ],
  "message" : "Insufficient Permission"
}
    at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:312)
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1049)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460)
    at ...publication.youtube.YouTubeAPIVersion3Connector.execute(YouTubeAPIVersion3Connector.java:107)
    at ...publication.youtube.YouTubeAPIVersion3ServiceImpl.createPlaylist(YouTubeAPIVersion3ServiceImpl.java:119)

Аутентификация выполняется следующим образом:

HttpTransport httpTransport = new NetHttpTransport();
JsonFactory jsonFactory = new JacksonFactory();
File privateKeyP12 = new File(getYouTubeConfigDirectory(), "/private-key-youtube-v3.p12");
GoogleCredential credential = new GoogleCredential.Builder()
 .setTransport(httpTransport)
 .setJsonFactory(jsonFactory)
 .setServiceAccountId("[email protected]")
 .setServiceAccountScopes(Collections.list(YouTubeScopes.YOUTUBE_READONLY, YouTubeScopes.YOUTUBE_UPLOAD))
 .setServiceAccountPrivateKeyFromP12File(privateKeyP12)
 .setClientSecrets("9...42.apps.googleusercontent.com", "DH...w8")
 .setRefreshListeners(getRefreshListeners())
 .build();
}
return new YouTube.Builder(httpTransport, jsonFactory, credential).setApplicationName(googleAppAccountName).build();

Имейте в виду, что я НЕ выполняю операции YouTube от имени другого пользователя. Мое веб-приложение управляет видео на собственном канале YouTube. Что я уже сделал:

  • через Google Cloud Console я включил YouTube v3 API, создал приложение с разрешением на редактирование
  • Я сгенерировал файл закрытого ключа p12, который загружается кодом выше
  • Я использую ключ API для всех операций

Что мне не хватает? Например: - что я должен делать с отпечатком открытого ключа, предоставленным Google Cloud Console? - правильно ли я устанавливаю setServiceAccountScopes() только с YouTubeScopes.YOUTUBE_READONLY и YouTubeScopes.YOUTUBE_UPLOAD? - Можно ли каким-то образом контролировать разрешения, помимо настройки «Может редактировать» в Cloud Console для электронной почты: [email protected]?

Часть моего разочарования заключается в том, что все примеры кода, предоставленные сайтом API YouTube v3, включают в себя запуск «безголового» набора инструментов AWT. Все, что хочет сделать мое приложение, — это аутентифицироваться с использованием собственной учетной записи YouTube.

Спасибо за ваше предложение.


person John in Berkeley    schedule 23.10.2013    source источник


Ответы (1)


Учетные записи служб не поддерживаются в Data API v3. Создайте идентификатор проекта в облачной консоли и используйте секрет и идентификатор клиента.

Хотя мы знаем о необходимости, на данный момент у нас нет новостей об этой доступности.

Вот наши примеры Java, которые помогут вам.

person Ibrahim Ulukaya    schedule 23.10.2013
comment
Спасибо за ваш ответ. Auth.java в примерах кода включает в себя этап сборки локального сервера и привязки его к порту 8080: new LocalServerReceiver.Builder().setPort(8080).build(). Есть ли способ заставить это работать, не запуская локальный сервер? - person John in Berkeley; 24.10.2013