YouTube API v.3 dengan GoogleCredential (OAuth2): Kredensial YouTube saya mendapat Izin Tidak Memadai saat membuat Daftar Putar atau mengunggahVideo

Kode berikut berfungsi dengan baik ketika saya mencari video menggunakan API YouTube Google (versi 3) tetapi gagal ketika mencoba:

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();

Pada langkah kredensial saya mendapatkan accessToken tetapi kegagalan terjadi di 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)

Otentikasi dilakukan sebagai berikut:

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();

Perlu diingat, Saya TIDAK melakukan operasi YouTube atas nama pengguna lain. Aplikasi web saya mengelola video di saluran YouTube-nya sendiri. Apa yang sudah saya lakukan:

  • melalui Google Cloud Console, saya mengaktifkan YouTube v3 API, membuat aplikasi dengan izin untuk mengedit
  • Saya membuat file kunci pribadi p12 yang dimuat oleh kode di atas
  • Saya menggunakan kunci API pada semua operasi

Apa yang saya lewatkan? Misalnya: - apa yang harus saya lakukan dengan Sidik Jari Kunci Publik yang disediakan oleh Google Cloud Console? - apakah saya menyetel setServiceAccountScopes() dengan benar hanya dengan YouTubeScopes.YOUTUBE_READONLY dan YouTubeScopes.YOUTUBE_UPLOAD? - Apakah ada cara agar saya dapat mengontrol izin selain menyetel "Dapat Mengedit" di Cloud Console untuk email: [email protected]?

Bagian dari rasa frustrasi saya adalah bahwa semua contoh kode yang disediakan oleh situs API YouTube v3 melibatkan pembuatan toolkit AWT "tanpa kepala". Yang ingin dilakukan aplikasi saya hanyalah mengautentikasi menggunakan akun YouTube-nya sendiri.

Terima kasih atas saranmu.


person John in Berkeley    schedule 23.10.2013    source sumber


Jawaban (1)


Akun layanan tidak didukung di Data API v3. Harap buat id proyek di konsol cloud dan gunakan rahasia dan id klien Anda.

Meskipun kami menyadari kebutuhannya, kami belum memiliki kabar mengenai ketersediaan ini saat ini.

Berikut contoh Java kami, yang dapat memandu Anda.

person Ibrahim Ulukaya    schedule 23.10.2013
comment
Terima kasih atas balasannya. Auth.java dalam contoh kode mencakup langkah untuk Membangun server lokal dan mengikatnya ke port 8080: LocalServerReceiver.Builder().setPort(8080).build() baru. Apakah ada cara agar ini berfungsi tanpa menyalakan server lokal? - person John in Berkeley; 24.10.2013