Pengantar

Seiring meningkatnya penggunaan aplikasi mobile, Single Page Application (SPA), dan layanan berbasis cloud, mekanisme autentikasi yang aman menjadi kebutuhan utama dalam pengembangan aplikasi modern. Salah satu standar yang paling banyak digunakan adalah OAuth 2.0, yaitu protokol otorisasi yang memungkinkan aplikasi memperoleh akses ke sumber daya pengguna tanpa harus mengetahui kata sandi mereka.

Namun, implementasi OAuth 2.0 pada aplikasi publik (public clients), seperti aplikasi mobile dan SPA, memiliki risiko keamanan. Salah satu ancamannya adalah Authorization Code Interception Attack, yaitu serangan ketika kode otorisasi berhasil dicuri sebelum ditukar menjadi access token.

Untuk mengatasi risiko tersebut, dikembangkanlah Proof Key for Code Exchange (PKCE) atau OAuth 2.0 PKCE. Mekanisme ini menambahkan lapisan keamanan tambahan sehingga hanya aplikasi yang mengajukan permintaan autentikasi yang dapat menukarkan authorization code menjadi access token.

Saat ini, PKCE telah menjadi praktik terbaik dalam implementasi OAuth 2.0 dan direkomendasikan untuk hampir semua jenis aplikasi modern.


Apa Itu OAuth 2.0 PKCE?

Pengertian OAuth 2.0 PKCE

OAuth 2.0 PKCE (Proof Key for Code Exchange) adalah ekstensi keamanan pada OAuth 2.0 Authorization Code Flow yang dirancang untuk mencegah pencurian authorization code selama proses autentikasi.

PKCE bekerja dengan menghasilkan dua nilai unik, yaitu:

  • Code Verifier, berupa string acak yang hanya diketahui oleh aplikasi klien.
  • Code Challenge, yaitu hasil transformasi dari code verifier menggunakan algoritma tertentu (umumnya SHA-256).

Ketika proses autentikasi selesai, server hanya akan memberikan access token apabila code verifier yang dikirim cocok dengan code challenge yang sebelumnya telah didaftarkan.

baca juga : Linux Kernel Panic Analysis: Panduan Menganalisis Penyebab Crash Kernel Secara Mendalam

Menurut RFC 7636 yang diterbitkan oleh Internet Engineering Task Force (IETF), PKCE dirancang untuk mengurangi risiko authorization code interception attack pada aplikasi publik yang tidak mampu menjaga kerahasiaan client secret (dikutip dari: https://datatracker.ietf.org/doc/html/rfc7636).


Mengapa OAuth 2.0 PKCE Diperlukan?

Pada OAuth 2.0 Authorization Code Flow tradisional, authorization code dikirim melalui browser sebelum ditukar menjadi access token. Jika kode tersebut berhasil dicuri oleh pihak yang tidak berwenang, penyerang dapat memperoleh akses ke akun pengguna.

PKCE hadir untuk memastikan bahwa hanya aplikasi yang memiliki code verifier yang dapat menyelesaikan proses pertukaran token.

Dengan demikian, meskipun authorization code berhasil disadap, penyerang tetap tidak dapat memperoleh access token.


Bagaimana Cara Kerja OAuth 2.0 PKCE?

Secara umum, alur PKCE berlangsung sebagai berikut:

  1. Aplikasi membuat code verifier secara acak.
  2. Aplikasi menghasilkan code challenge dari code verifier.
  3. Code challenge dikirim bersama permintaan autentikasi.
  4. Pengguna berhasil login dan server mengirimkan authorization code.
  5. Aplikasi mengirim authorization code beserta code verifier.
  6. Server memverifikasi kecocokan antara code verifier dan code challenge.
  7. Jika valid, server menerbitkan access token.

Dengan proses tersebut, keamanan autentikasi meningkat tanpa mengubah pengalaman pengguna.


Komponen Utama OAuth 2.0 PKCE

Code Verifier

Merupakan string acak dengan tingkat entropi tinggi yang dibuat oleh aplikasi sebelum proses autentikasi dimulai.


Code Challenge

Nilai yang dihasilkan dari code verifier. Umumnya menggunakan metode S256 (SHA-256), meskipun metode plain juga tersedia namun tidak lagi direkomendasikan.


Authorization Code

Kode sementara yang diterbitkan oleh Authorization Server setelah pengguna berhasil melakukan autentikasi.


Access Token

Token yang digunakan aplikasi untuk mengakses API atau sumber daya yang dilindungi.


Authorization Server

Komponen yang memverifikasi identitas pengguna, memvalidasi PKCE, dan menerbitkan token.


Keunggulan OAuth 2.0 PKCE

Implementasi PKCE memberikan berbagai manfaat keamanan, antara lain:

  • Mencegah authorization code interception attack.
  • Tidak memerlukan penyimpanan client secret pada aplikasi publik.
  • Mendukung aplikasi mobile dan SPA.
  • Meningkatkan keamanan proses login.
  • Direkomendasikan sebagai standar modern OAuth 2.0.
  • Kompatibel dengan berbagai Identity Provider.

Karena alasan tersebut, PKCE kini menjadi mekanisme autentikasi yang digunakan secara luas.


Perbedaan OAuth 2.0 Biasa dan OAuth 2.0 PKCE

Aspek OAuth 2.0 Authorization Code OAuth 2.0 PKCE
Code Verifier Tidak ada Ada
Code Challenge Tidak ada Ada
Perlindungan dari Interception Terbatas Sangat baik
Cocok untuk Mobile App Kurang direkomendasikan Sangat direkomendasikan
Keamanan Authorization Code Lebih rendah Lebih tinggi

PKCE memberikan perlindungan tambahan tanpa mengubah alur dasar OAuth 2.0.

baca juga : Volume Shadow Copy Forensics: Mengungkap Bukti Digital Tersembunyi dari Snapshot Windows


Implementasi OAuth 2.0 PKCE

PKCE banyak digunakan pada berbagai jenis aplikasi, seperti:

Aplikasi Mobile

Android dan iOS menggunakan PKCE karena tidak dapat menyimpan client secret secara aman.


Single Page Application (SPA)

Aplikasi berbasis JavaScript memanfaatkan PKCE untuk meningkatkan keamanan autentikasi.


Desktop Application

PKCE membantu melindungi proses login pada aplikasi desktop lintas platform.


Cloud Application

Layanan SaaS menggunakan PKCE untuk mengamankan akses pengguna terhadap API.


Best Practice Menggunakan OAuth 2.0 PKCE

Gunakan Metode S256

Hindari penggunaan metode plain dan gunakan SHA-256 untuk menghasilkan code challenge.


Buat Code Verifier yang Acak

Gunakan generator bilangan acak yang aman secara kriptografi (cryptographically secure random generator).


Gunakan HTTPS

Seluruh proses autentikasi harus dilakukan melalui koneksi HTTPS agar data tidak dapat disadap.


Validasi Redirect URI

Pastikan redirect URI telah terdaftar dan divalidasi untuk mencegah serangan Open Redirect.


Kombinasikan dengan OpenID Connect

PKCE dapat digunakan bersama OpenID Connect (OIDC) untuk menghadirkan autentikasi yang lebih aman dan standar.

Menurut dokumentasi resmi OAuth 2.0 Security Best Current Practice, penggunaan PKCE direkomendasikan untuk semua klien OAuth, termasuk confidential client, karena mampu meningkatkan keamanan proses otorisasi terhadap berbagai jenis serangan modern (dikutip dari: https://datatracker.ietf.org/doc/html/draft-ietf-oauth-security-topics).


Tantangan Implementasi PKCE

Walaupun relatif mudah diterapkan, terdapat beberapa tantangan yang perlu diperhatikan.

Kompatibilitas Sistem Lama

Beberapa Authorization Server versi lama belum mendukung PKCE secara penuh.


Kesalahan Implementasi

Pembuatan code verifier yang lemah atau validasi yang tidak benar dapat mengurangi efektivitas PKCE.


Konfigurasi Redirect URI

Kesalahan konfigurasi redirect URI tetap dapat membuka peluang serangan meskipun PKCE telah digunakan.

baca juga : QUIC Protocol Deep Dive: Mengupas Teknologi Transport Modern yang Membuat HTTP/3 Lebih Cepat dan Aman


Kesimpulan

OAuth 2.0 PKCE merupakan ekstensi keamanan yang memperkuat Authorization Code Flow dengan menambahkan mekanisme code verifier dan code challenge. Pendekatan ini mampu mencegah pencurian authorization code sehingga hanya aplikasi yang memulai proses autentikasi yang dapat memperoleh access token.

Dengan semakin luasnya penggunaan aplikasi mobile, SPA, dan layanan cloud, PKCE kini menjadi standar keamanan yang direkomendasikan dalam implementasi OAuth 2.0. Dikombinasikan dengan HTTPS, validasi redirect URI, serta OpenID Connect, PKCE membantu organisasi membangun sistem autentikasi yang lebih aman, andal, dan sesuai dengan praktik keamanan modern.