Digital Transformation

PKCE (Proof Key for Code Exchange)

Vito Atmo
Vito Atmo·27 Mei 2026·0 kali dibaca·2 min baca

TL;DR: PKCE (dibaca pixy) adalah ekstensi OAuth 2.0 yang menambahkan code_verifier dan code_challenge ke alur authorization code, sehingga attacker tidak bisa menukar authorization code curian menjadi access token. Sejak 2020, IETF dan OAuth 2.1 mewajibkan PKCE untuk semua public client, termasuk single page app, mobile app, dan desktop app.

Apa itu PKCE?

PKCE adalah mekanisme tambahan di alur authorization code OAuth 2.0 yang mencegah serangan code interception. Aplikasi membuat string acak code_verifier, lalu mengirim hash SHA-256-nya sebagai code_challenge ke authorization server. Saat menukar authorization code menjadi access token, klien wajib menyertakan code_verifier asli. Server memverifikasi dengan menghitung ulang hash dan membandingkannya dengan code_challenge yang disimpan sebelumnya. Karena hanya klien asli yang punya code_verifier, code curian tidak bisa dipakai. PKCE adalah pelengkap OAuth, bukan pengganti.

Cara Kerja Singkat

TahapAksi klienAksi server
1Buat code_verifier (43-128 char random)-
2Hitung code_challenge = base64url(SHA256(verifier))-
3Redirect ke /authorize?...&code_challenge=...&code_challenge_method=S256Simpan code_challenge
4Terima authorization code di redirect URIKirim code
5POST /token dengan code + code_verifierVerifikasi: hash(verifier) == code_challenge? Lalu kirim access token

Tanpa PKCE, attacker yang mencegat authorization code di redirect URI (lewat malicious browser extension, log file, atau referer leak) bisa langsung menukarnya menjadi access token. Dengan PKCE, attacker juga butuh code_verifier yang tidak pernah dikirim lewat URL.

Kenapa Penting?

Untuk public client yang tidak bisa menyimpan client secret (browser SPA, mobile app, CLI tool), PKCE menutup celah keamanan utama OAuth 2.0 lama. RFC 7636 dan OAuth 2.1 sekarang menjadikan PKCE wajib, bahkan untuk confidential client. Bagi marketer yang bangun integrasi sendiri ke API Google, Meta, atau Spotify, memahami PKCE menghindari kebocoran akun yang sulit diaudit. Bagi developer Next.js, Auth.js dan Supabase Auth sudah default mengaktifkan PKCE.

Pertanyaan Umum

Apa bedanya PKCE dengan state parameter?

state mencegah CSRF di flow authorization. PKCE mencegah pencurian authorization code. Keduanya berbeda lapisan dan saling melengkapi.

Apakah PKCE menggantikan client secret?

Untuk public client ya, karena public client memang tidak bisa menyimpan secret dengan aman. Untuk confidential client (backend server), PKCE adalah tambahan, bukan pengganti.

Bagikan