OAuth (Open Authorization) adalah standar terbuka yang memungkinkan sebuah aplikasi (klien) untuk mendapatkan akses terbatas ke data pengguna yang disimpan pada layanan lain (penyedia layanan) tanpa harus meminta kata sandi pengguna secara langsung. Dengan kata lain, OAuth memberi cara aman bagi satu aplikasi untuk bertindak atas nama pengguna di aplikasi lain.
Sejarah Singkat
OAuth pertama kali dirilis pada tahun 2007 sebagai hasil kerja sama antara Twitter, Google, Yahoo! dan beberapa perusahaan lainnya. Tujuannya adalah mengatasi masalah keamanan ketika aplikasi pihak ketiga ingin mengakses API pada layanan web. Versi yang paling banyak digunakan saat ini adalah OAuth 2.0, yang resmi diterbitkan pada Oktober 2012.
Bagaimana OAuth Bekerja?
OAuth menggunakan alur token untuk mengontrol akses. Berikut adalah langkah langkah umum dalam alur otorisasi (Authorization Code Grant), yang paling populer untuk aplikasi web:
- Pengguna memulai proses login pada aplikasi klien.
- Aplikasi klien mengarahkan pengguna ke authorization server penyedia layanan (misalnya Google). URL ini berisi
client_id,redirect_uri, danscope. - Pengguna masuk dengan akun mereka dan memberi persetujuan (atau menolak) akses yang diminta.
- Jika disetujui, server otorisasi mengirimkan authorization code ke
redirect_uriyang telah ditentukan. - Aplikasi klien menukarkan authorization code tersebut dengan access token (dan opsional refresh token) ke token endpoint penyedia layanan.
- Dengan access token, aplikasi klien dapat memanggil API layanan target untuk mengakses data yang diizinkan.
Komponen Utama OAuth
- Resource Owner biasanya pengguna yang memiliki data.
- Client aplikasi yang ingin mengakses data (misalnya aplikasi mobile atau web).
- Authorization Server server yang mengotentikasi pengguna dan mengeluarkan token.
- Resource Server server yang menyimpan data dan menerima token untuk memberi akses.
Jenis Alur (Grant Types)
OAuth 2.0 menyediakan beberapa jenis alur yang disesuaikan dengan tipe aplikasi:
- Authorization Code Grant untuk aplikasi web server side.
- Implicit Grant dulu dipakai untuk aplikasi SPA, kini tidak direkomendasikan.
- Resource Owner Password Credentials Grant hanya untuk aplikasi yang sangat terpercaya.
- Client Credentials Grant untuk layanan server to server tanpa keterlibatan pengguna.
- Device Authorization Grant untuk perangkat dengan input terbatas (TV, konsol).
Keamanan dalam OAuth
Walaupun OAuth mengurangi kebutuhan berbagi kata sandi, masih ada risiko jika tidak diterapkan dengan benar. Beberapa praktik keamanan penting:
- Gunakan HTTPS pada semua endpoint.
- Simpan
client_secretdengan aman, jangan di embed di front end. - Batasi scope hanya pada yang diperlukan.
- Setel masa berlaku access token pendek, gunakan refresh token untuk perpanjangan.
- Implementasikan PKCE (Proof Key for Code Exchange) untuk aplikasi mobile dan SPA.
Perbedaan OAuth 1.0a dan OAuth 2.0
OAuth 1.0a mengharuskan tanda tangan kriptografis pada setiap permintaan, membuatnya lebih kompleks. OAuth 2.0 mengadopsi model token yang lebih sederhana, tetapi menempatkan lebih banyak beban keamanan pada implementasi aplikasi.
Contoh Implementasi
Berikut contoh singkat penggunaan OAuth 2.0 dengan Google di JavaScript (fetch API):
const clientId = 'YOUR_CLIENT_ID'; const redirectUri = 'https://yourapp.com/callback'; const authUrl = `https://accounts.google.com/o/oauth2/v2/auth?response_type=code&client_id=${clientId}&redirect_uri=${encodeURIComponent(redirectUri)}&scope=profile%20email`; window.location = authUrl; // Setelah kembali ke redirect_uri, tukar kode dengan token: async function exchangeCode(code){ const tokenResponse = await fetch('https://oauth2.googleapis.com/token', { method:'POST', headers:{'Content-Type':'application/x-www-form-urlencoded'}, body: new URLSearchParams({ code: code, client_id: clientId, client_secret: 'YOUR_CLIENT_SECRET', redirect_uri: redirectUri, grant_type: 'authorization_code' }) }); const data = await tokenResponse.json(); return data.access_token; } Kapan Harus Menggunakan OAuth?
Gunakan OAuth bila:
- Aplikasi Anda perlu mengakses API pihak ketiga atas nama pengguna.
- Anda ingin menghindari penyimpanan kata sandi pengguna.
- Anda membutuhkan kontrol akses granular (misalnya hanya membaca profil).
Jika aplikasi hanya mengakses data internal tanpa melibatkan pihak ketiga, otentikasi tradisional atau token JWT mungkin sudah cukup.
Kesimpulan
OAuth merupakan protokol otorisasi yang memberikan cara aman dan standar untuk berbagi data antar layanan tanpa mengungkapkan kredensial pengguna. Dengan memahami komponen, alur, dan praktik keamanan yang tepat, pengembang dapat mengintegrasikan login sosial, akses API, dan layanan berbagi data dengan percaya diri.
Untuk informasi lebih lanjut, kunjungi dokumen resmi RFC 6749 OAuth 2.0 atau panduan penyedia layanan seperti Google, Facebook, dan Microsoft.