Mendalami OAuth 2.0: empat peran utama resource owner, client, authorization server, dan resource server, komponen endpoint dan token, serta semua grant type dengan kapan sebaiknya dipakai.

Episode 3 membedah arsitektur Keycloak. Episode 4 ini mulai menyelam ke protokol yang paling sering kalian pakai: OAuth 2.0. Kalian akan memahami empat peran yang selalu terlibat, komponen endpoint dan token, seluruh grant type dengan kapan memakainya, serta pertimbangan keamanan yang wajib diingat. Materi ini menjadi dasar untuk episode 5 yang membedah Authorization Code flow langkah demi langkah.
OAuth 2.0 mendefinisikan empat peran yang bekerjasama:
| Peran | Siapa | Tugas |
|---|---|---|
| Resource Owner | Pengguna | Pemilik resource; menyetujui atau menolak akses |
| Client | Aplikasi | Meminta akses atas nama resource owner |
| Authorization Server | Keycloak | Memvalidasi identitas dan menerbitkan token |
| Resource Server | API | Menyediakan resource; memvalidasi access token |
Tip
Cara mudah mengingat: resource owner adalah pemilik, client adalah pemohon izin, authorization server adalah penerbit izin, dan resource server adalah penjaga resource. Keempatnya selalu terlibat dalam hampir semua alur OAuth 2.0.
Penting untuk memahami batasan peran ini. Resource owner hampir selalu pengguna manusia. Client bisa berupa aplikasi web, aplikasi mobile, atau bahkan service backend yang bertindak atas nama dirinya sendiri. Authorization server dalam konteks kita adalah Keycloak. Resource server adalah API yang menyimpan data yang ingin diakses.
OAuth 2.0 mendefinisikan beberapa komponen yang menjadi titik kontak alur:
/realms/{realm}/protocol/openid-connect/token.openid, profile, dan email.Berikut contoh respon dari token endpoint:
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJidWRpIiwiYXVkIjoicG9ydGFsLWFwcCJ9...",
"expires_in": 300,
"refresh_expires_in": 1800,
"refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJidWRpIiwiZXhwIjoyMzQ1Njc4OTB9...",
"token_type": "Bearer"
}Perhatikan expires_in: access token berumur pendek (300 detik dalam contoh), sementara refresh_token punya masa hidup lebih panjang. Desain ini disengaja — token yang berumur pendek meminimalkan kerusakan jika bocor.
OAuth 2.0 mendefinisikan beberapa cara (grant type) untuk mendapatkan token, masing-masing sesuai konteks:
| Grant Type | Konteks | Keterlibatan User | Status |
|---|---|---|---|
| Authorization Code | Web app server-side | Ya, lewat browser | Direkomendasikan |
| Implicit | SPA lama | Ya | Deprecated |
| Password (ROPC) | Klien tepercaya | Ya, password dikirim | Terbatas, tidak direkomendasikan |
| Client Credentials | Service-to-service (M2M) | Tidak | Direkomendasikan untuk M2M |
| Device Code | Perangkat tanpa browser (TV, IoT) | Ya, lewat perangkat lain | Untuk perangkat terbatas |
| Refresh Token | Menyegarkan access token | Tidak | Mekanisme pendukung |
Empat pertimbangan yang menyempitkan pilihan:
Aturan praktis: jika ragu, pilih Authorization Code + PKCE. Ini kombinasi paling aman untuk hampir semua kasus dengan pengguna.
Keycloak memetakan peran OAuth 2.0 ke konfigurasi nyata:
public atau confidential.openid, profile, dan email.Titik-titik ini akan menjadi menu yang sering kalian buka di admin console saat mengimplementasikan grant type di episode 5 dan seterusnya.
Empat hal keamanan yang wajib melekat pada setiap implementasi OAuth 2.0:
Sebuah kalimat yang merangkum semua pertimbangan di atas: perlakukan token seperti kunci fisik. Kunci tidak dibiarkan di tempat terbuka, tidak diberi ke orang yang tidak dikenal, dan diganti jika pernah hilang. State dan PKCE memastikan token hanya sampai ke tangan yang benar, sementara penyimpanan yang aman menjaga token tetap di tempatnya.
Episode 4 meletakkan dasar OAuth 2.0: empat peran, komponen authorization dan token endpoint, seluruh grant type, serta pertimbangan keamanan. Kalian sekarang tahu lokasi token endpoint Keycloak dan bentuk respon token yang akan sering kalian temui.
Inti yang harus dibawa pulang:
Di episode 5 berikutnya, kalian membedah Authorization Code flow secara mendetail — dari permintaan authorisasi, login pengguna, kode, penukaran token, hingga PKCE.