Menggunakan OAuth 2.0 untuk Mengakses Google API

Google API menggunakan protokol OAuth 2.0 untuk autentikasi dan otorisasi. Google mendukung skenario OAuth 2.0 umum seperti skenario untuk server web, sisi klien, terinstal, dan aplikasi perangkat input terbatas.

Untuk memulai, dapatkan kredensial klien OAuth 2.0 dari Google API Console. Kemudian, aplikasi klien Anda akan meminta token akses dari Server Otorisasi Google, mengekstrak token dari respons, dan mengirimkan token tersebut ke Google API yang ingin Anda akses. Untuk demonstrasi interaktif penggunaan OAuth 2.0 dengan Google (termasuk opsi untuk menggunakan kredensial klien Anda sendiri), lakukan eksperimen dengan OAuth 2.0 Playground.

Halaman ini memberikan ringkasan tentang skenario otorisasi OAuth 2.0 yang didukung Google, dan menyediakan link ke konten yang lebih mendetail. Guna mengetahui detail penggunaan OAuth 2.0 untuk autentikasi, lihat OpenID Connect.

Langkah dasar

Semua aplikasi mengikuti pola dasar saat mengakses Google API menggunakan OAuth 2.0. Pada level yang tinggi, Anda mengikuti lima langkah:

1. Dapatkan kredensial OAuth 2.0 dari Google API Console.

Buka Google API Console untuk mendapatkan kredensial OAuth 2.0 seperti client ID dan rahasia klien yang diketahui oleh Google dan aplikasi Anda. Kumpulan nilai ini bervariasi berdasarkan jenis aplikasi yang Anda bangun. Misalnya, aplikasi JavaScript tidak memerlukan rahasia, sedangkan aplikasi server web memerlukannya.

Anda harus membuat klien OAuth yang sesuai untuk platform tempat aplikasi Anda akan berjalan, misalnya:

2. Dapatkan token akses dari Server Otorisasi Google.

Sebelum aplikasi Anda dapat mengakses data pribadi menggunakan Google API, aplikasi harus mendapatkan token akses yang memberikan akses ke API tersebut. Token akses tunggal dapat memberikan berbagai tingkat akses ke beberapa API. Parameter variabel bernama scope mengontrol kumpulan resource dan operasi yang diizinkan oleh token akses. Selama permintaan token akses, aplikasi Anda akan mengirimkan satu atau beberapa nilai dalam parameter scope.

Ada beberapa cara untuk membuat permintaan ini, dan cara tersebut bervariasi sesuai jenis aplikasi yang Anda bangun. Misalnya, aplikasi JavaScript mungkin meminta token akses menggunakan pengalihan browser ke Google, sementara aplikasi yang diinstal di perangkat yang tidak memiliki browser akan menggunakan permintaan layanan web.

Beberapa permintaan memerlukan langkah autentikasi dengan pengguna login dengan Akun Google mereka. Setelah login, pengguna ditanya apakah mereka bersedia memberikan satu atau beberapa izin yang diminta aplikasi Anda. Proses ini disebut izin pengguna.

Jika pengguna memberikan setidaknya satu izin, Server Otorisasi Google akan mengirim token akses (atau kode otorisasi yang dapat digunakan aplikasi Anda untuk mendapatkan token akses) dan daftar cakupan akses yang diberikan oleh token tersebut ke aplikasi Anda. Jika pengguna tidak memberikan izin, server akan menampilkan error.

Secara umum, sebaiknya minta cakupan secara bertahap, pada saat akses diperlukan, bukan sejak awal. Misalnya, aplikasi yang ingin mendukung penyimpanan acara ke kalender tidak boleh meminta akses Google Kalender hingga pengguna menekan tombol "Tambahkan ke Kalender"; lihat Otorisasi inkremental.

3. Memeriksa cakupan akses yang diberikan oleh pengguna.

Bandingkan cakupan yang disertakan dalam respons token akses dengan cakupan yang diperlukan untuk mengakses fitur dan fungsi aplikasi Anda, yang bergantung pada akses ke Google API terkait. Nonaktifkan semua fitur aplikasi yang tidak dapat berfungsi tanpa akses ke API terkait.

Cakupan yang disertakan dalam permintaan Anda mungkin tidak cocok dengan cakupan yang disertakan dalam respons, meskipun pengguna telah memberikan semua cakupan yang diminta. Lihat dokumentasi setiap Google API untuk mengetahui cakupan yang diperlukan untuk akses. API dapat memetakan beberapa nilai string cakupan ke satu cakupan akses, yang menampilkan string cakupan yang sama untuk semua nilai yang diizinkan dalam permintaan. Contoh: Google People API dapat menampilkan cakupan https://www.googleapis.com/auth/contacts saat aplikasi meminta pengguna mengizinkan cakupan https://www.google.com/m8/feeds/; metode Google People API people.updateContact memerlukan cakupan https://www.googleapis.com/auth/contacts yang diberikan.

4. Kirim token akses ke API.

Setelah memperoleh token akses, aplikasi akan mengirimkan token tersebut ke Google API dalam header permintaan Otorisasi HTTP. Anda dapat mengirim token sebagai parameter string kueri URI, tetapi kami tidak merekomendasikannya, karena parameter URI dapat berakhir di file log yang tidak sepenuhnya aman. Selain itu, sebaiknya gunakan REST untuk menghindari pembuatan nama parameter URI yang tidak perlu.

Token akses hanya valid untuk sekumpulan operasi dan resource yang dijelaskan dalam scope permintaan token. Misalnya, jika token akses dikeluarkan untuk Google Calendar API, token tersebut tidak akan memberikan akses ke Google Contacts API. Namun, Anda dapat mengirim token akses tersebut ke Google Calendar API beberapa kali untuk operasi serupa.

5. Muat ulang token akses, jika diperlukan.

Token akses memiliki masa berlaku yang terbatas. Jika aplikasi Anda memerlukan akses ke Google API setelah masa berlaku token akses tunggal berakhir, aplikasi dapat memperoleh token refresh. Token refresh memungkinkan aplikasi Anda memperoleh token akses baru.

Skenario

Aplikasi server web

Endpoint Google OAuth 2.0 mendukung aplikasi server web yang menggunakan bahasa dan framework seperti PHP, Java, Go, Python, Ruby, dan ASP.NET.

Urutan otorisasi dimulai saat aplikasi Anda mengalihkan browser ke URL Google; URL tersebut menyertakan parameter kueri yang menunjukkan jenis akses yang diminta. Google menangani autentikasi pengguna, pemilihan sesi, dan izin pengguna. Hasilnya adalah sebuah kode otorisasi, yang dapat ditukar aplikasi dengan token akses dan token refresh.

Aplikasi harus menyimpan token refresh untuk digunakan di masa mendatang dan menggunakan token akses tersebut untuk mengakses Google API. Setelah masa berlaku token akses berakhir, aplikasi akan menggunakan token refresh untuk mendapatkan token baru.

Aplikasi Anda mengirimkan permintaan token ke Server Otorisasi Google, menerima kode otorisasi, menukar kode dengan token, dan menggunakan token tersebut untuk memanggil endpoint Google API.

Untuk mengetahui detailnya, lihat Menggunakan OAuth 2.0 untuk Aplikasi Server Web.

Aplikasi terpasang

Endpoint Google OAuth 2.0 mendukung aplikasi yang diinstal di perangkat seperti komputer, perangkat seluler, dan tablet. Saat Anda membuat client ID melalui Google API Console, tetapkan bahwa ini adalah Aplikasi terinstal, lalu pilih Android, Chrome app, iOS, Universal Windows Platform (UWP), atau Desktop app sebagai jenis aplikasi.

Proses ini menghasilkan client ID dan, dalam beberapa kasus, rahasia klien, yang Anda sematkan di kode sumber aplikasi. (Dalam konteks ini, rahasia klien jelas tidak diperlakukan sebagai rahasia.)

Urutan otorisasi dimulai saat aplikasi Anda mengalihkan browser ke URL Google; URL tersebut menyertakan parameter kueri yang menunjukkan jenis akses yang diminta. Google menangani autentikasi pengguna, pemilihan sesi, dan izin pengguna. Hasilnya adalah sebuah kode otorisasi, yang dapat ditukar aplikasi dengan token akses dan token refresh.

Aplikasi harus menyimpan token refresh untuk digunakan di masa mendatang dan menggunakan token akses tersebut untuk mengakses Google API. Setelah masa berlaku token akses berakhir, aplikasi akan menggunakan token refresh untuk mendapatkan token baru.

Aplikasi Anda mengirimkan permintaan token ke Server Otorisasi Google, menerima kode otorisasi, menukar kode dengan token, dan menggunakan token tersebut untuk memanggil endpoint Google API.

Untuk mengetahui detailnya, lihat Menggunakan OAuth 2.0 untuk Aplikasi Terinstal.

Aplikasi sisi klien (JavaScript)

Endpoint Google OAuth 2.0 mendukung aplikasi JavaScript yang berjalan di browser.

Urutan otorisasi dimulai saat aplikasi Anda mengalihkan browser ke URL Google; URL tersebut menyertakan parameter kueri yang menunjukkan jenis akses yang diminta. Google menangani autentikasi pengguna, pemilihan sesi, dan izin pengguna.

Hasilnya adalah token akses, yang harus divalidasi klien sebelum memasukkannya ke dalam permintaan Google API. Bila masa berlaku token telah berakhir, aplikasi akan mengulangi proses.

Aplikasi JS Anda mengirimkan permintaan token ke Server Otorisasi Google, menerima token, memvalidasi token, dan menggunakan token tersebut untuk memanggil endpoint Google API.

Untuk mengetahui detailnya, lihat Menggunakan OAuth 2.0 untuk Aplikasi Sisi Klien.

Aplikasi pada perangkat input terbatas

Endpoint Google OAuth 2.0 mendukung aplikasi yang berjalan pada perangkat input terbatas, seperti konsol game, kamera video, dan printer.

Urutan otorisasi dimulai dengan aplikasi yang membuat permintaan layanan web ke URL Google untuk kode otorisasi. Respons berisi beberapa parameter, termasuk URL dan kode yang ditampilkan aplikasi kepada pengguna.

Pengguna mendapatkan URL dan kode dari perangkat, lalu beralih ke perangkat atau komputer terpisah dengan kemampuan input yang lebih lengkap. Pengguna meluncurkan browser, membuka URL yang ditentukan, login, dan memasukkan kode.

Sementara itu, aplikasi melakukan polling URL Google pada interval tertentu. Setelah pengguna menyetujui akses, respons dari server Google akan berisi token akses dan token refresh. Aplikasi harus menyimpan token refresh untuk digunakan di masa mendatang dan menggunakan token akses tersebut untuk mengakses Google API. Setelah masa berlaku token akses berakhir, aplikasi akan menggunakan token refresh untuk mendapatkan token baru.

Pengguna login di perangkat terpisah yang memiliki browser

Untuk mengetahui detailnya, lihat Menggunakan OAuth 2.0 untuk Perangkat.

Akun layanan

Google API seperti Prediction API dan Google Cloud Storage dapat bertindak atas nama aplikasi Anda tanpa mengakses informasi pengguna. Dalam situasi ini, aplikasi Anda perlu membuktikan identitasnya sendiri kepada API, tetapi izin pengguna tidak diperlukan. Demikian pula, dalam skenario perusahaan, aplikasi Anda dapat meminta akses yang didelegasikan ke beberapa resource.

Untuk jenis interaksi server ke server ini, Anda memerlukan akun layanan, yang merupakan akun milik aplikasi Anda, bukan milik pengguna akhir individual. Aplikasi Anda memanggil Google API atas nama akun layanan, dan izin pengguna tidak diperlukan. (Dalam skenario non-akun layanan, aplikasi Anda memanggil Google API atas nama pengguna akhir, dan izin pengguna terkadang diperlukan.)

Kredensial akun layanan, yang Anda dapatkan dari Google API Console, menyertakan alamat email yang dihasilkan yang unik, client ID, dan setidaknya satu pasangan kunci publik/pribadi. Anda menggunakan client ID dan satu kunci pribadi untuk membuat JWT yang ditandatangani dan membuat permintaan token akses dalam format yang sesuai. Selanjutnya, aplikasi Anda akan mengirimkan permintaan token ke Server Otorisasi Google OAuth 2.0, yang menampilkan token akses. Aplikasi menggunakan token untuk mengakses Google API. Setelah masa berlaku token habis, aplikasi akan mengulangi proses.

Aplikasi server Anda menggunakan JWT untuk meminta token dari Server Otorisasi Google, lalu menggunakan token tersebut untuk memanggil endpoint Google API. Tidak ada pengguna akhir yang terlibat.

Untuk mengetahui detailnya, lihat dokumentasi akun layanan.

Ukuran token

Ukuran token dapat bervariasi, hingga batas berikut:

  • Kode otorisasi: 256 byte
  • Token akses: 2048 byte
  • Token refresh: 512 byte

Token akses yang ditampilkan oleh Security Token Service API Google Cloud memiliki struktur yang mirip dengan token akses OAuth 2.0 Google API, tetapi memiliki batas ukuran token yang berbeda. Untuk mengetahui detailnya, lihat dokumentasi API.

Google berhak mengubah ukuran token dalam batas ini, dan aplikasi Anda harus mendukung ukuran token variabel yang sesuai.

Akhir masa berlaku token refresh

Anda harus menulis kode untuk mengantisipasi kemungkinan bahwa token refresh yang diberikan mungkin tidak lagi berfungsi. Token refresh mungkin berhenti berfungsi karena salah satu alasan berikut:

Project Google Cloud Platform dengan layar izin OAuth yang dikonfigurasi untuk jenis pengguna eksternal dan status publikasi "Testing" akan diberi token refresh yang akan habis masa berlakunya dalam 7 hari, kecuali jika satu-satunya cakupan OAuth yang diminta adalah subset nama, alamat email, dan profil pengguna (melalui cakupan userinfo.email, userinfo.profile, openid, atau yang setara OpenID Connect).

Saat ini ada batas 100 token refresh per Akun Google per client ID OAuth 2.0. Jika batas ini tercapai, pembuatan token refresh baru akan otomatis membatalkan token refresh terlama tanpa peringatan. Batas ini tidak berlaku untuk akun layanan.

Selain itu, ada batas yang lebih besar pada jumlah total token refresh yang dapat dimiliki akun pengguna atau akun layanan di semua klien. Sebagian besar pengguna normal tidak akan melampaui batas ini, tetapi akun developer yang digunakan untuk menguji penerapan mungkin tidak akan melebihi batas tersebut.

Jika Anda perlu memberikan otorisasi ke beberapa program, komputer, atau perangkat, salah satu solusinya adalah membatasi jumlah klien yang Anda beri otorisasi per Akun Google menjadi 15 atau 20. Jika Anda adalah admin Google Workspace, Anda dapat membuat pengguna tambahan dengan hak istimewa administratif dan menggunakannya untuk memberikan otorisasi kepada beberapa klien.

Menangani kebijakan kontrol sesi untuk organisasi Google Cloud Platform (GCP)

Administrator organisasi GCP mungkin mengharuskan autentikasi ulang pengguna secara rutin saat mereka mengakses resource GCP, menggunakan fitur kontrol sesi Google Cloud. Kebijakan ini memengaruhi akses ke Konsol Google Cloud, Google Cloud SDK (juga dikenal sebagai gcloud CLI), dan aplikasi OAuth pihak ketiga apa pun yang memerlukan cakupan Cloud Platform. Jika pengguna menerapkan kebijakan kontrol sesi, pada akhir durasi sesi, panggilan API Anda akan mengalami error seperti yang akan terjadi jika token refresh dicabut - panggilan akan gagal dengan jenis error invalid_grant; kolom error_subtype dapat digunakan untuk membedakan antara token yang dicabut dan kegagalan akibat kebijakan kontrol sesi (misalnya, "error_subtype": "invalid_rapt"). Karena durasi sesi ini bisa sangat terbatas dengan proses mulai ulang, yaitu antara 1 jam hingga 2 jam.

Selain itu, Anda tidak boleh menggunakan, atau menganjurkan penggunaan, kredensial pengguna untuk deployment server ke server. Jika kredensial pengguna di-deploy pada server untuk tugas atau operasi yang berjalan lama dan pelanggan menerapkan kebijakan kontrol sesi pada pengguna tersebut, aplikasi server akan gagal karena tidak ada cara untuk mengautentikasi ulang pengguna saat durasi sesi berakhir.

Untuk mengetahui informasi selengkapnya tentang cara membantu pelanggan Anda men-deploy fitur ini, baca artikel bantuan yang berfokus pada admin ini.

Library klien

Library klien berikut terintegrasi dengan framework populer, yang mempermudah penerapan OAuth 2.0. Fitur lainnya akan ditambahkan ke library seiring waktu.