Beralih dari ClientLogin ke OAuth 2.0

Ikai Lan, YouTube Developer Relations – June 2013

YouTube API menggunakan OAuth 2.0 untuk mengizinkan 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 menghentikan penggunaan ClientLogin pada 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, dan bahkan aplikasi yang berjalan di perangkat seperti televisi yang tidak memiliki mekanisme input canggih, yang sulit dilakukan menggunakan ClientLogin. Selain itu, kami mendapati bahwa ClientLogin menyebabkan lebih banyak masalah setelah peluncuran bagi banyak developer.

Menggunakan OAuth 2.0 untuk skrip mandiri sisi server

Banyak developer menggunakan ClientLogin untuk mengizinkan skrip command line yang berjalan di server tanpa browser. Dengan OAuth 2.0, hampir selalu ada browser yang terlibat – kecuali 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 terautentikasi atas nama pengguna harus mengalihkan pengguna ke halaman autentikasi google.com yang menjelaskan apa yang coba diakses oleh aplikasi. Aplikasi web kemudian menerima token, yang digunakannya 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 ada di bawah:

Token yang digunakan adalah string ASCII. Jika berupa token offline, token tersebut portabel. Dengan menggunakan token yang diambil, Anda akan dapat menjalankan skrip di desktop, lalu menyalin dan menggunakan kode di server jarak jauh tanpa GUI, asalkan kode tersebut membuat instance klien OAuth 2.0 dengan client ID dan secret yang sama. Selain Python, library klien Google API untuk bahasa pemrograman lain juga menyediakan metode pembantu untuk mengelola token, yang dapat dibagikan antar-klien dan bahkan digunakan langsung di library HTTP tingkat yang lebih rendah 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
  • Cron job 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 yang berlaku lama memberikan detail selengkapnya tentang cara membuat token offline yang dapat digunakan untuk proses sisi server.

Praktik terbaik client ID dan rahasia klien

Kode apa pun yang memiliki pasangan ID klien dan rahasia yang sama dapat menggunakan token akses yang sama. Sebaiknya batasi akses ke ID klien dan rahasia klien untuk 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 ID klien "Aplikasi terinstal", yang meminta informasi tambahan untuk memverifikasi bahwa permintaan hanya berasal dari aplikasi yang dirilis oleh tim Anda.

Di perangkat Android, bukan menggunakan ID klien dan rahasia klien, aplikasi Anda diidentifikasi menggunakan kombinasi nama paket dan hash sertifikat penandatanganan. Di perangkat iOS, ID paket dan ID app store digunakan. Dokumentasi resmi tentang cara mengambil informasi ini dapat ditemukan di halaman bantuan Google Cloud console.

Akun Layanan tidak berfungsi dengan YouTube API

Akun layanan tidak berfungsi untuk panggilan YouTube Data API karena akun layanan memerlukan channel YouTube 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 yang ditetapkan ke unauthorized dan alasan yang ditetapkan ke youtubeSignupRequired.

Akses offline/berjangka panjang ke YouTube API

OAuth 2.0 memiliki token berumur pendek dan token berumur panjang. Untuk operasi sekali pakai, token akses berumur pendek adalah opsi terbaik. Masa berlaku token ini akan segera berakhir setelah diberikan. Untuk tugas yang berjalan lama, Anda mungkin ingin mempelajari cara mendapatkan token refresh, yang digunakan untuk mengambil token akses yang berlaku singkat.

Untuk memastikan bahwa aplikasi Anda menerima token refresh yang berlaku lama, bukan token akses yang berlaku singkat, gunakan alur "Aplikasi yang Diinstal" saat membuat ID klien, dan pilih Other untuk nilai "Jenis aplikasi yang diinstal":

Sebaiknya Anda menggunakan alur "Aplikasi terinstal" untuk kasus penggunaan ini. Jika Anda memerlukan akses berdurasi panjang ke YouTube API di aplikasi web, Anda dapat mengambilnya dengan menyetel parameter access_type ke offline dan parameter approval_prompt ke force dalam permintaan otorisasi awal atau konfigurasi klien Anda. Beberapa library klien akan mengelola pengambilan dan memperbarui token akses. Jika Anda tertarik untuk menulis kode otorisasi kustom Anda sendiri, kami telah memublikasikan postingan blog di blog Google Code yang dapat Anda gunakan sebagai dasar 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 dibandingkan dengan 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 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, aplikasi akan mengambil token untuk melakukan panggilan API. Untuk melihat cara kerjanya, lihat demo, yang dapat dijalankan di perangkat yang terhubung ke web. API itu sendiri tidak bergantung pada platform, sehingga berguna untuk perangkat yang tidak memiliki kemampuan rendering web. Kami telah memposting kode contoh di 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 merasa bahwa penyiapan aplikasi mereka untuk menggunakan OAuth 2.0 memerlukan sedikit lebih banyak pekerjaan untuk memulai, tetapi setelah di-porting, 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 apa pun dalam artikel ini, jangan ragu untuk bertanya dengan tag youtube-api di StackOverflow.