Menggunakan OAuth dengan Google Data API

Eric Bidelman, tim Google Data API
September 2008

Pengantar

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

Baru-baru ini, semua Google Data API mengadopsi dukungan untuk OAuth, protokol terbuka yang bertujuan untuk membuat standar cara aplikasi desktop dan web mengakses data pribadi pengguna. OAuth menyediakan cara melakukan autentikasi API dengan 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 yang berbeda.

Audiens

Artikel ini mengasumsikan bahwa Anda telah memahami satu atau beberapa Google Data API, tetapi tidak harus memiliki konsep di balik OAuth. Jika Anda baru memulai, atau hanya ingin tahu tentang OAuth, tidak salah lagi. Artikel ini akan memberikan dasar dasar konsep. Saya juga akan membahas detail penerapan OAuth Google.

Dokumen ini juga ditujukan bagi developer yang terbiasa menggunakan AuthSub, terutama dalam mode terdaftar dengan keamanan yang ditingkatkan. Selama prosesnya, saya akan mencoba untuk menyoroti kesamaan dan perbedaan antara dua protokol. Jika memiliki aplikasi yang menggunakan AuthSub, Anda dapat menggunakan informasi ini untuk bermigrasi ke OAuth, yang merupakan protokol modern yang lebih terbuka.


Sedikit terminologi

Memahami OAuth berkaitan dengan memahami terminologinya. Spesifikasi OAuth dan dokumentasi Autentikasi OAuth untuk Aplikasi Web Google sangat bergantung pada definisi tertentu. Jadi, mari pahami arti setiap konteks dalam konteks penerapan OAuth Google.

  1. "Tarian OAuth"

    Persyaratan tidak resmi saya untuk menjelaskan proses autentikasi/otorisasi OAuth secara lengkap.

  2. (OAuth) Meminta token

    Token awal yang memungkinkan Google mengetahui bahwa aplikasi Anda meminta akses ke salah satu Google Data API. Langkah kedua dalam tarian OAuth adalah pengguna memberikan akses ke data mereka secara manual. Jika langkah ini berhasil, token permintaan akan diotorisasi.

  3. (OAuth) Token akses

    Langkah terakhir dansa adalah menukar token permintaan yang sah dengan token akses. Setelah aplikasi Anda memiliki token ini, pengguna tidak perlu melakukan tarian OAuth lagi, kecuali jika token dicabut.

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

  4. (OAuth) Endpoint

    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
    Izinkan token permintaan:https://www.google.com/accounts/OAuthAuthorizeToken
    Upgrade ke token akses:https://www.google.com/accounts/OAuthGetAccessToken

    Kesamaan dengan AuthSub:
    Mengganti token permintaan yang diotorisasi untuk token akses serupa dengan mengupgrade token AuthSub sekali pakai ke token sesi yang tahan lama 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. (OAuth) Penyedia Layanan

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

  6. (OAuth) Konsumen

    Program yang meminta izin untuk mengakses data pengguna (yaitu aplikasi Anda). Protokol OAuth 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 Anda terlebih dahulu dan mengupload sertifikat publik ke Google. Lihat Pendaftaran untuk Aplikasi Berbasis Web dan Membuat kunci dan sertifikat untuk digunakan dengan mode terdaftar untuk mendapatkan informasi cara melakukannya.

Permintaan penandatanganan

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 string dasar tanda tangan. String dasar adalah data yang Anda tanda tangani dengan kunci pribadi (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: Hal ini hanya dimaksudkan sebagai representasi. oauth_signature Anda akan bertahan lebih lama.

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 berenkode URL: http%3A%2F%2Fwww.google.com%2Fcalendar%2Ffeeds%2Fdefault%2Fallcalendars%2Ffull.
  • oauth_token dienkode dengan URL ganda.

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 lebih lanjut tentang penandatanganan permintaan menggunakan OAuth, lihat Menandatangani Permintaan OAuth.

Perbedaan dengan AuthSub:
Sebagai perbandingan, berikut adalah contoh yang sama menggunakan AuthSub yang 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 lebih lanjut tentang penandatanganan permintaan menggunakan AuthSub, lihat Menandatangani Permintaan AuthSub.

Alat OAuth Playground

Tujuan

Beberapa pengguna menyarankan agar OAuth memiliki kurva pembelajaran yang tinggi. Dibandingkan dengan API autentikasi Google lainnya, saya setuju. Keuntungan OAuth akan terlihat jelas saat Anda memperluas aplikasi untuk menggunakan layanan lain (non-Google). Menulis satu bagian kode autentikasi yang berfungsi di berbagai penyedia layanan, dan API-nya, menurut saya cukup bagus. Anda nanti akan berterima kasih kepada Anda karena telah mempelajari protokol tersebut.

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. Menggambarkan alur autentikasi OAuth: mengambil token permintaan, memberi otorisasi pada 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 bagaimana menggunakan oauth_token untuk berinteraksi dengan feed Data Google yang diautentikasi. Anda dapat menggunakan data GET/POST/PUT/DELETE.
  5. Lihat feed yang diautentikasi langsung di browser Anda.
  6. Memungkinkan Anda menguji oauth_consumer_key (domain terdaftar) dan kunci pribadi sendiri.
  7. Cari tahu layanan feed Data Google yang tersedia untuk oauth_token.

Jalankan Demo

Langkah 1: Pilih Cakupan Anda

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

Kesamaan 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 "Ubah Parameter OAuth". Kemudian, Anda dapat menguji dengan kunci pribadi Anda sendiri dengan mengubah oauth_consumer_key ke domain terdaftar dan memasukkan kunci pribadi dengan mengklik "gunakan kunci pribadi Anda". Hanya gunakan 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 otomatis dibuat untuk Anda.

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

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

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 tarian OAuth.

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

Kolom tertentu akan diisi dengan data.

  • "String dasar tanda tangan" menampilkan bentuk string dasar yang tepat yang digunakan untuk membuat parameter oauth_signature.
  • "Header otorisasi" menampilkan header Authorization yang sesuai untuk permintaan.
  • Kotak "Ubah Parameter OAuth" yang 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 saat ini kita miliki. Saat ini, token tersebut adalah token permintaan.

Selanjutnya, klik tombol "Otorisasi" di kotak "Dapatkan token".

Pada halaman otorisasi ini, klik tombol "Berikan Akses" untuk mengizinkan token permintaan dan dialihkan kembali ke OAuth Playground.

Kesamaan dengan AuthSub:
Halaman otorisasi ini sama untuk AuthSub.

Perbedaan dengan AuthSub:
Parameter URL next AuthSub sejalan dengan parameter oauth_callback. Perbedaannya adalah di OAuth, oauth_callback bersifat opsional. Setelah pengguna mengklik tombol "Berikan akses", token permintaan akan diotorisasi 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 akan mengupgrade token permintaan yang diizinkan (seperti yang ditunjukkan oleh label "token akses") berwarna merah.

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

Sekarang kita dapat melakukan sesuatu yang menarik.

Menggunakan token akses

Sekarang Anda siap mengkueri feed, menyisipkan, memperbarui, atau menghapus data. Berhati-hatilah saat melakukan tiga metode HTTP terakhir ini saat Anda bekerja dengan data aktual.

Tips: Untuk menemukan feed yang tersedia bagi token akses Anda, klik tombol "feed yang tersedia".

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

Contoh ini tidak menampilkan 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 sintaksis.

Contoh: Cara memperbarui postingan

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

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

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

Server akan merespons dengan 200 OK.

Tips: Hapus centang kotak 'Sintaksis Sintaksis' secara manual, bukan link edit. Setelah kueri, Anda akan dapat mengklik link dalam isi respons XML.

Kesimpulan

Teknologi seperti AtomPub/Atom Publishing Protocol (protokol dasar Google Data API) dan OAuth membantu memajukan web. Karena semakin banyak situs yang mulai menerapkan standar ini, kami adalah pemenangnya. Membuat aplikasi pembunuh secara tiba-tiba menjadi kurang menakutkan.

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

Resource