Menggunakan OAuth dengan Google Data API

Eric Bidelman, tim Google Data API
September 2008

Pengantar

Ini adalah saat yang menarik bagi developer. Kami mulai melihat sejumlah standar terbuka diadopsi di seluruh web, dan seperti yang Anda ketahui, Google selalu menjadi penggemar berat standar dan mendukung komunitas open source.

Baru-baru ini, semua Google Data API mengadopsi dukungan untuk OAuth, sebuah protokol terbuka yang bertujuan untuk menstandardisasi cara aplikasi desktop dan web mengakses data pribadi pengguna. OAuth menyediakan cara untuk melakukan autentikasi API dengan cara yang standar dan aman. Sebagai programmer, kita diajari untuk menggunakan kembali kode jika memungkinkan. OAuth akan membantu developer mengurangi jumlah kode duplikat yang mereka tulis dan mempermudah pembuatan alat yang berfungsi dengan beberapa layanan dari berbagai penyedia.

Audiens

Artikel ini mengasumsikan bahwa Anda sudah memahami satu atau beberapa Google Data API, tetapi belum tentu konsep di balik OAuth. Jika Anda baru memulai, atau hanya ingin tahu tentang OAuth, Anda berada di tempat yang tepat. Artikel ini akan memberi Anda dasar-dasar konsep tersebut. Saya juga akan membahas detail implementasi OAuth Google.

Dokumen ini juga ditujukan bagi developer yang sudah terbiasa menggunakan AuthSub, terutama dalam mode terdaftar dengan keamanan yang ditingkatkan. Seiring berjalannya waktu, kami akan mencoba menyoroti persamaan dan perbedaan antara kedua protokol tersebut. Jika memiliki aplikasi yang menggunakan AuthSub, Anda dapat menggunakan informasi ini untuk bermigrasi ke OAuth, yang merupakan protokol yang lebih terbuka dan modern.


Sedikit terminologi

Memahami OAuth adalah tentang memahami terminologinya. Spesifikasi OAuth dan dokumentasi Autentikasi OAuth untuk Aplikasi Web Google sangat mengandalkan definisi tertentu, jadi mari kita perjelas arti setiap definisi dalam konteks implementasi OAuth Google.

  1. "OAuth dance"

    Istilah tidak resmi saya untuk mendeskripsikan proses autentikasi/otorisasi OAuth lengkap.

  2. (OAuth) Meminta token

    Token awal yang memberi tahu Google bahwa aplikasi Anda meminta akses ke salah satu Google Data API. Langkah kedua dari proses OAuth adalah pengguna memberikan akses ke data mereka secara manual. Jika langkah ini berhasil, token permintaan akan diizinkan.

  3. (OAuth) Token akses

    Langkah terakhir dalam proses ini adalah menukar token permintaan yang diberi otorisasi dengan token akses. Setelah aplikasi Anda memiliki token ini, pengguna tidak perlu melalui proses OAuth lagi, kecuali jika token dicabut.

    Kemiripan dengan AuthSub:
    Token akses OAuth sama dengan token sesi AuthSub yang aman.

  4. Endpoint (OAuth)

    Ini adalah URI yang diperlukan untuk mengautentikasi aplikasi dan mendapatkan token akses. Ada tiga total - satu untuk setiap langkah proses OAuth. Endpoint OAuth Google adalah:

    Mendapatkan token permintaan:https://www.google.com/accounts/OAuthGetRequestToken
    Beri otorisasi token permintaan:https://www.google.com/accounts/OAuthAuthorizeToken
    Mengupgrade ke token akses:https://www.google.com/accounts/OAuthGetAccessToken

    Kemiripan dengan AuthSub:
    Penukaran token permintaan yang diberi otorisasi dengan token akses serupa dengan mengupgrade token AuthSub sekali pakai menjadi token sesi yang aktif dalam jangka panjang di https://www.google.com/accounts/AuthSubRequestToken dan https://www.google.com/accounts/AuthSubSessionToken. Perbedaannya adalah AuthSub tidak memiliki konsep token permintaan awal. Sebagai gantinya, pengguna memulai proses token dari halaman otorisasi AuthSubRequestToken.

  5. Penyedia Layanan (OAuth)

    Dalam kasus Google Data API, penyedia ini adalah Google. Secara umum, penyedia layanan digunakan untuk mendeskripsikan situs atau layanan web yang menyediakan endpoint OAuth. Contoh lain penyedia layanan OAuth adalah MySpace.

  6. Konsumen (OAuth)

    Program yang meminta izin untuk mengakses data pengguna (yaitu aplikasi Anda). Protokol OAuth bersifat fleksibel karena memungkinkan berbagai jenis klien (web, terinstal, desktop, seluler).

Catatan: Meskipun protokol OAuth mendukung kasus penggunaan aplikasi desktop/terinstal, Google hanya mendukung OAuth untuk aplikasi web.

Memulai

Pendaftaran

Ada sedikit penyiapan sebelum Anda dapat mulai menggunakan OAuth dengan Google Data API. Karena semua permintaan OAuth harus ditandatangani secara digital, Anda harus mendaftarkan domain dan mengupload sertifikat publik ke Google terlebih dahulu. Lihat Pendaftaran untuk Aplikasi Berbasis Web dan Membuat kunci dan sertifikat untuk digunakan dengan mode terdaftar untuk mengetahui informasi selengkapnya tentang cara melakukannya.

Menandatangani permintaan

Setelah domain Anda terdaftar, Anda siap untuk mulai menandatangani permintaan. Salah satu konsep OAuth yang paling sulit adalah cara membuat oauth_signature dengan benar dan gagasan tentang string dasar tanda tangan. String dasar adalah data yang Anda tandatangani dengan kunci pribadi Anda (menggunakan RSA_SHA1). Hasilnya adalah nilai yang Anda tetapkan untuk oauth_signature.

Contoh permintaan

GET daftar Google Kalender pengguna di http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime

Format string dasar base_string = http-method&base-http-request-url&normalized-string-of-oauth_parameters
Contoh string dasar GET&http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull&oauth_consumer_key%3Dexample.com%26oauth_nonce%3D4572616e48616d6d%26oauth_signature_method%3DRSA-SHA1%26oauth_timestamp%3D137131200%26oauth_token%3D1%252Fab3cd9j4ks73hf7g%26oauth_version%3D1.0%26orderby%3Dstarttime
Contoh permintaan HTTP
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1
Host:  http://www.google.com
Content-Type: application/atom+xml
Authorization: OAuth oauth_token="1%2Fab3cd9j4ks73hf7g", oauth_signature_method="RSA-SHA1", oauth_signature="wOJIO9AvZbTSMK%2FPY%3D...", oauth_consumer_key="example.com", oauth_timestamp="137131200", oauth_nonce="4572616e48616d6d", oauth_version="1.0"

Catatan: Ini hanya dimaksudkan sebagai representasi. oauth_signature Anda akan jauh lebih panjang.

Catatan tentang string dasar:

  • Parameter kueri orderby=starttime diurutkan bersama dengan parameter oauth_* lainnya dalam pengurutan nilai byte leksikografis.
  • String ini juga tidak berisi karakter '?'.
  • Bagian base-http-request-url hanya berisi URL dasar yang dienkode dengan URL: http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull.
  • oauth_token dienkode URL dua kali.

Catatan tentang header Authorization:

  • Urutan parameter oauth_* tidak menjadi masalah di header Authorization.
  • Header tidak menyertakan orderby=starttime seperti yang dilakukan string dasar. Parameter kueri tersebut dipertahankan sebagai bagian dari URL permintaan.

Untuk mengetahui informasi selengkapnya tentang penandatanganan permintaan menggunakan OAuth, lihat Menandatangani Permintaan OAuth.

Perbedaan dari AuthSub:
Sebagai perbandingan, berikut contoh yang sama menggunakan AuthSub aman:

Format string dasar base_string = http-method http-request-URL timestamp nonce
Contoh string dasar
GET http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull%3Forderby%3Dstarttime 137131200 4572616e48616d6d
Contoh permintaan HTTP
GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime HTTP/1.1
Host:  http://www.google.com
Content-Type: application/atom+xml
Authorization: AuthSub token="GD32CMCL25aZ-v____8B" data="GET http://www.google.com/calendar/feeds/default/allcalendars/full?orderby=starttime 137131200 4572616e48616d6d" sig="MCwCFrV93K4agg==..." sigalg="rsa-sha1"

Untuk mengetahui informasi selengkapnya tentang penandatanganan permintaan menggunakan AuthSub, lihat Menandatangani Permintaan AuthSub.

Alat OAuth Playground

Tujuan

Beberapa pengguna menyarankan bahwa OAuth memiliki kurva pembelajaran yang tinggi. Dibandingkan dengan API autentikasi Google lainnya, saya setuju. Keuntungan OAuth akan terlihat saat Anda memperluas aplikasi untuk menggunakan layanan lain (non-Google). Menulis satu bagian kode autentikasi yang berfungsi di berbagai penyedia layanan, dan API mereka, terdengar cukup bagus bagi saya. Anda akan berterima kasih pada diri sendiri nanti karena telah mempelajari protokol ini sekarang.

OAuth Playground adalah alat yang saya buat untuk membantu developer mengatasi masalah OAuth mereka. Anda dapat menggunakan Playground untuk membantu men-debug masalah, memeriksa penerapan Anda sendiri, atau bereksperimen dengan Google Data API.

Apa fungsinya?

  1. Mengilustrasikan alur autentikasi OAuth: mengambil token permintaan, memberi otorisasi token, dan mengupgradenya ke token akses.
  2. Menampilkan string dasar tanda tangan yang benar untuk setiap permintaan.
  3. Menampilkan header Authorization yang benar untuk setiap permintaan.
  4. Menunjukkan cara menggunakan oauth_token untuk berinteraksi dengan feed Data Google yang diautentikasi. Anda dapat GET/POST/PUT/DELETE data.
  5. Lihat feed yang diautentikasi langsung di browser Anda.
  6. Memungkinkan Anda menguji oauth_consumer_key Anda sendiri (domain terdaftar) dan kunci pribadi.
  7. Temukan layanan feed Data Google yang tersedia untuk oauth_token Anda.

Jalankan Demo

Langkah 1: Pilih Cakupan

Pertama, tentukan API mana yang ingin Anda gunakan dengan memilih satu atau beberapa cakupan. Dalam demonstrasi ini, saya meminta token yang akan berfungsi dengan Blogger dan Google Kontak.

Kemiripan dengan AuthSub:
AuthSub juga memerlukan parameter scope untuk mengontrol rentang data yang dapat diakses oleh token. Google telah menerapkan parameter ini seperti yang disarankan dalam spesifikasi OAuth.

Langkah 2: Ubah Parameter dan Setelan OAuth

Untuk saat ini, jangan ubah setelan apa pun di kotak "Modify the OAuth Parameters". Selanjutnya, Anda dapat melakukan pengujian dengan kunci pribadi Anda sendiri dengan mengubah oauth_consumer_key ke domain terdaftar Anda dan memasukkan kunci pribadi Anda dengan mengklik "gunakan kunci pribadi Anda sendiri". Gunakan hanya kunci pribadi TEST.

Catatan: oauth_signature_method dan oauth_consumer_key adalah satu-satunya kolom yang dapat diedit di sini. oauth_timestamp, oauth_nonce, dan oauth_token akan dibuat secara otomatis untuk Anda.

Selain RSA-SHA1, Anda dapat memilih untuk menggunakan HMAC-SHA1 untuk oauth_signature_method. Jika demikian, Playground akan menampilkan kotak tambahan tempat Anda harus memasukkan oauth_consumer_key dan secret konsumen Anda sendiri. Nilai ini dapat ditemukan di halaman https://www.google.com/accounts/ManageDomains untuk domain terdaftar Anda.

Perbedaan dari AuthSub:
Di AuthSub yang aman, tidak ada parameter untuk menetapkan nama domain secara eksplisit. Domain disertakan sebagai bagian dari parameter URL next. Ada parameter seperti itu di OAuth: oauth_consumer_key. Tetapkan ke domain terdaftar Anda.

Langkah 3-5: Dapatkan token akses

Ada tiga langkah untuk mendapatkan token akses OAuth. Langkah pertama adalah mengambil token permintaan. Hal ini memungkinkan Google mengetahui bahwa aplikasi Anda memulai proses OAuth.

Pertama, klik tombol "Minta token" di kotak "Dapatkan Token".

Kolom tertentu akan diisi dengan data.

  • "String dasar tanda tangan" menampilkan bentuk yang tepat dari string dasar yang digunakan untuk membuat parameter oauth_signature.
  • "Header otorisasi" menampilkan header Authorization yang sesuai untuk permintaan.
  • Kotak "Modify the OAuth Parameters" diisi dengan nilai oauth_nonce dan oauth_timestamp yang dikirim dalam permintaan.
  • Input oauth_token diisi dengan nilai yang sesuai yang ditampilkan dalam isi respons. Playground juga menampilkan jenis oauth_token yang kita miliki saat ini. Saat ini, ini adalah token permintaan.

Selanjutnya, klik tombol "Authorize" di kotak "Get the token".

Di halaman otorisasi ini, klik tombol "Grant Access" untuk mengizinkan token permintaan dan dialihkan kembali ke OAuth Playground.

Kesamaan dengan AuthSub:
Halaman otorisasi ini sama untuk AuthSub.

Perbedaan dari AuthSub:
Parameter URL next AuthSub analog dengan parameter oauth_callback. Perbedaannya adalah bahwa di OAuth, oauth_callback bersifat opsional. Setelah pengguna mengklik tombol "Beri akses", token permintaan akan diizinkan dan upgrade token ke https://www.google.com/accounts/OAuthGetAccessToken dapat dilakukan secara asinkron.

Tips: Menentukan URL oauth_callback lebih disarankan jika Anda menulis aplikasi web karena memberikan pengalaman pengguna yang lebih baik.

Terakhir, klik tombol "Access token" di kotak "Get the Token".

Tindakan ini mengupgrade token permintaan yang diberi otorisasi (seperti yang ditunjukkan oleh label "access token" berwarna merah).

Jika Anda ingin mengambil token baru, klik "mulai lagi" untuk memulai ulang proses OAuth.

Sekarang kita bisa melakukan sesuatu yang menarik.

Menggunakan token akses

Sekarang Anda siap untuk mengueri feed, menyisipkan, memperbarui, atau menghapus data. Berhati-hatilah saat melakukan tiga metode HTTP terakhir ini karena Anda sedang bekerja dengan data asli Anda.

Tips: Untuk menemukan feed yang tersedia untuk token akses Anda, klik tombol "available feeds".

Berikut contoh kueri: GET http://www.blogger.com/feeds/1982051675575479214/posts/default?max-results=3

Contoh ini menampilkan tidak lebih dari tiga postingan di blog tertentu. Anda juga dapat melihat feed/entri yang ditampilkan langsung di browser dengan mengklik link "Lihat di browser" di bawah area yang disorot sintaksisnya.

Contoh: Cara memperbarui postingan

  1. Temukan elemen <link> dengan rel="edit" di postingan yang ingin Anda perbarui. Tampilannya akan terlihat seperti:
    <link rel="edit" href="http://www.blogger.com/feeds/1982051675575479214/posts/default/8138973184593279875"/>

    Tempelkan URL href di input "Masukkan feed Data Google".

  2. Salin XML entri yang ada dengan mengklik "lihat biasa" di bagian atas panel yang disorot sintaksisnya. Hanya salin isi respons, bukan header.
  3. Ubah dropdown metode HTTP menjadi PUT.
  4. Klik "enter post data" di bawah dropdown tersebut dan tempelkan XML <entry> ke dalam pop-up.
  5. Klik tombol "execute".

Server akan merespons dengan 200 OK.

Tips: Daripada menyalin link edit secara manual, hapus centang pada kotak 'Sorotan Sintaksis?'. Setelah kueri, Anda dapat mengklik link dalam isi respons XML.

Kesimpulan

Teknologi seperti AtomPub/Atom Publishing Protocol (protokol dasar Google Data API) dan OAuth membantu mendorong kemajuan web. Seiring dengan semakin banyaknya situs yang mulai menerapkan standar ini, kita sebagai developer akan diuntungkan. Membuat aplikasi unggulan tiba-tiba menjadi tidak terlalu sulit.

Jika ada pertanyaan atau komentar tentang OAuth Playground, atau penggunaan OAuth dengan Google API, kunjungi kami di Forum Dukungan G Suite API dan Marketplace API.

Resource