Beralih dari ClientLogin ke OAuth 2.0

Ikai Lan, YouTube Developer Relations – June 2013

YouTube API menggunakan OAuth 2.0 untuk memberikan otorisasi pada permintaan pengguna. Kami sering ditanya apakah kami akan menambahkan dukungan untuk autentikasi ClientLogin atau yang serupa di YouTube API ke depannya. Namun, kami secara resmi tidak lagi menggunakan ClientLogin mulai 20 April 2012, dan tidak ada rencana untuk menambahkan mekanisme tersebut.

Ada banyak alasan mengapa kami yakin bahwa mendukung berbagai alur otorisasi OAuth 2.0 lebih baik bagi pengguna YouTube daripada ClientLogin. Alur ini mendukung kasus penggunaan untuk aplikasi desktop, aplikasi khusus web, aplikasi seluler native, dan bahkan aplikasi yang berjalan di perangkat seperti televisi yang tidak memiliki mekanisme input yang canggih, sesuatu yang sulit dilakukan menggunakan ClientLogin. Selain itu, kami mendapati bahwa ClientLogin menyebabkan lebih banyak masalah bagi banyak developer setelah peluncuran, beberapa di antaranya kami jelaskan dalam postingan blog kami, ClientLogin #FAIL.

Menggunakan OAuth 2.0 untuk skrip mandiri sisi server

Banyak developer menggunakan ClientLogin untuk memberikan otorisasi pada skrip command line yang berjalan di server tanpa browser. Dengan OAuth 2.0, hampir selalu ada browser yang terlibat – pengecualian adalah saat Anda mengerjakan aplikasi Android yang menggunakan Google Play Services untuk mengambil token melalui GoogleAuthUtil.

Dalam alur khusus web, situs yang ingin melakukan panggilan API yang diautentikasi atas nama pengguna harus mengalihkan pengguna ke halaman autentikasi google.com yang menjelaskan apa yang coba diakses aplikasi. Aplikasi web kemudian menerima token, yang digunakan untuk melakukan panggilan API. Pengguna kemudian dapat mencabut akses aplikasi kapan saja menggunakan halaman connected apps and sites.

Contoh kode Python kami menunjukkan cara skrip command line dapat meluncurkan browser dan melakukan panggilan API dari jendela terminal, membuat server lokal untuk memproses kode setelah pengalihan otorisasi, dan menyimpan token secara otomatis untuk panggilan API mendatang. Video tentang cara kerjanya dapat dilihat di bawah:

Token yang digunakan adalah string ASCII. Jika token offline, token tersebut portabel. Dengan token yang diambil, Anda dapat menjalankan skrip di desktop, lalu menyalin dan menggunakan kode di server jarak jauh tanpa GUI, asalkan kode membuat instance klien OAuth 2.0 dengan client ID dan secret yang sama. Selain Python, library klien Google API untuk bahasa pemrograman lainnya juga menyediakan metode bantuan untuk mengelola token, yang dapat dibagikan antarklien dan bahkan digunakan di library HTTP level yang lebih rendah secara langsung di header klien atau sebagai parameter URL.

Beberapa contoh skrip sisi server yang menggunakan token offline:

  • Daemon yang memantau direktori untuk video baru yang akan diupload secara otomatis ke YouTube
  • Tugas cron yang memperbarui playlist setiap hari dengan konten baru
  • Skrip yang memantau data video melalui YouTube Analytics API dan memberi tahu pengelola channel saat peristiwa tertentu terjadi, seperti waktu tonton gabungan yang melebihi batas. Perhatikan bahwa dalam hal ini, OAuth 2.0 adalah satu-satunya metode otorisasi yang didukung karena Analytics API tidak mendukung ClientLogin.

Bagian tentang token akses jangka panjang memberikan detail selengkapnya tentang cara membuat token offline yang dapat digunakan untuk proses sisi server.

Praktik terbaik client ID dan rahasia klien

Setiap kode yang memiliki ID klien dan pasangan secret yang sama dapat menggunakan token akses yang sama. Sebaiknya batasi akses ke client ID dan rahasia klien ke kode yang berjalan di mesin dan perangkat dalam organisasi Anda.

Jangan sertakan client ID dan rahasia klien sebagai bagian dari kode aplikasi seluler native Anda. Semua developer yang melakukan autentikasi OAuth 2.0 dari perangkat seluler harus menggunakan client ID "Aplikasi terinstal", yang meminta informasi tambahan untuk memverifikasi bahwa permintaan hanya berasal dari aplikasi yang dirilis oleh tim Anda.

Di perangkat Android, aplikasi Anda diidentifikasi menggunakan kombinasi nama paket dan hash sertifikat penandatanganan, bukan menggunakan client ID dan secret klien. Di perangkat iOS, ID paket dan ID app store digunakan. Dokumentasi resmi tentang pengambilan informasi ini dapat ditemukan di halaman bantuan Google API Console.

Akun Layanan tidak berfungsi dengan YouTube API

Akun layanan tidak berfungsi untuk panggilan YouTube Data API karena akun layanan memerlukan channel YouTube yang terkait, dan Anda tidak dapat mengaitkan channel baru atau yang sudah ada dengan akun layanan. Jika Anda menggunakan akun layanan untuk memanggil YouTube Data API, server API akan menampilkan error dengan jenis error ditetapkan ke unauthorized dan alasannya ditetapkan ke youtubeSignupRequired.

Akses offline/berumur panjang ke YouTube API

OAuth 2.0 memiliki token berumur pendek dan token berumur panjang. Untuk operasi satu kali, token akses jangka pendek adalah opsi terbaik. Masa berlaku token ini akan segera berakhir setelah diberikan. Untuk tugas yang berjalan lama, sebaiknya pertimbangkan untuk mendapatkan token refresh, yang digunakan untuk mengambil token akses jangka pendek.

Untuk memastikan aplikasi Anda menerima token refresh dengan masa berlaku lama, bukan token akses dengan masa berlaku singkat, gunakan alur "Aplikasi Terinstal" saat membuat client ID, dan pilih Other untuk nilai "Jenis aplikasi terinstal":

Sebaiknya gunakan alur "Aplikasi terinstal" untuk kasus penggunaan ini. Jika memerlukan akses berdurasi panjang ke YouTube API di aplikasi web, Anda dapat mengambilnya dengan menetapkan parameter access_type ke offline dan parameter approval_prompt ke force di permintaan otorisasi awal atau konfigurasi klien Anda. Beberapa library klien akan mengelola pengambilan dan pembaruan token akses. Jika Anda tertarik untuk menulis kode otorisasi kustom Anda sendiri, kami memublikasikan postingan blog di blog Google Code yang dapat Anda gunakan sebagai dasar untuk kode Anda.

Menggunakan OAuth 2.0 dengan ponsel, tablet, dan perangkat lainnya

Saat menulis aplikasi Android, developer dapat memanfaatkan Google Play services untuk menangani detail otorisasi. Layanan Google Play menawarkan alur otorisasi standar untuk semua Google API, termasuk API untuk platform YouTube. Pendekatan ini akan memberikan pengalaman pengguna yang jauh lebih baik bagi pengguna aplikasi Android Anda daripada autentikasi kustom menggunakan ClientLogin.

Di perangkat iOS, Google menyediakan dua opsi:

Untuk perangkat yang dimaksudkan untuk bertindak sebagai perangkat "layar kedua" atau perangkat seperti televisi tanpa mekanisme input yang mudah digunakan, OAuth 2.0 untuk Perangkat adalah pendekatan yang lebih disukai. OAuth 2.0 untuk Perangkat berfungsi dengan menampilkan kode unik untuk pengguna saat permintaan otorisasi diperlukan. Pada tahap ini, pengguna akan diminta untuk membuka http://google.com/device di perangkat lain, seperti laptop atau ponsel, dan memasukkan kode unik. Aplikasi menampilkan layar yang terlihat seperti ini:

Saat pengguna memasukkan kode di perangkat lain, aplikasi akan melakukan polling secara berkala untuk melihat apakah kode telah dimasukkan. Setelah itu, token akan diambil untuk melakukan panggilan API. Untuk melihat cara kerjanya, lihat demo, yang dapat dijalankan di perangkat apa pun yang mendukung web. API itu sendiri tidak bergantung pada platform, sehingga berguna untuk perangkat yang tidak memiliki kemampuan rendering web. Kami telah memposting kode contoh dalam Python untuk demo yang akan digunakan sebagai referensi.

Ringkasan

Otorisasi OAuth 2.0 memberikan fleksibilitas bagi developer yang memerlukan otorisasi YouTube. Developer yang sudah terbiasa dengan ClientLogin mungkin mendapati bahwa menyiapkan aplikasi mereka untuk menggunakan OAuth 2.0 memerlukan sedikit lebih banyak pekerjaan untuk memulai, tetapi setelah di-port, aplikasi OAuth 2.0 menawarkan lebih banyak fleksibilitas, keamanan, dan kegunaan di beberapa platform untuk pengguna akhir.

Jika ada pertanyaan lain tentang OAuth 2.0 atau contoh dalam artikel ini, jangan ragu untuk bertanya dengan tag youtube-api di StackOverflow.