Discussions
Kesulitan Pertukaran Kode Otorisasi (Token Exchange) dengan PKCE
Halo Tim Scalev,
Saya sedang dalam proses mengintegrasikan aplikasi saya dengan Scalev menggunakan alur OAuth 2.0 Authorization Code with PKCE. Saya telah mengikuti dokumentasi yang tersedia dengan saksama, namun saya terus menerus mengalami kendala pada Step 6: Exchanging the Code for Tokens.
Berikut adalah rincian dari situasi yang saya hadapi:
Alur yang Berhasil:
- Step 2 (PKCE Parameters): Saya berhasil men-generate
code_verifier
dancode_challenge
(SHA256, Base64-URL-encoded) dengan benar. - Step 3 (Authorization Request): Saya berhasil mengarahkan pengguna ke
https://app.scalev.id/oauth/authorize
dengan parameter yang lengkap, termasukcode_challenge
dancode_challenge_method=S256
. - Step 4 & 5 (User Authorization & Callback): Pengguna berhasil login, menyetujui aplikasi saya, dan saya berhasil menerima
code
danstate
diredirect_uri
yang telah saya daftarkan. Verifikasistate
juga berhasil.
Titik Kegagalan (Step 6):
Masalah terjadi secara konsisten saat saya melakukan request POST
ke https://api.scalev.id/v2/oauth/token
untuk menukarkan code
yang saya dapatkan. Saya selalu mendapatkan respons error, invalid_grant
, The code verifier is invalid or does not match the code challenge
.
Langkah-langkah Debugging yang Telah Saya Lakukan:
Untuk memastikan ini bukan kesalahan di sisi implementasi saya, saya telah mencoba berbagai pendekatan, namun semuanya gagal di titik yang sama:
-
Manajemen
code_verifier
: Saya sangat yakin bahwacode_verifier
yang saya kirimkan dalam request token adalah string asli yang sama persis dengan yang saya generate di awal alur.- Saya telah mencoba menyimpannya di server-side session (menggunakan
express-session
di Node.js). - Saya juga telah mencoba menyimpannya di database untuk memastikan tidak ada masalah persistensi.
- Sebagai upaya terakhir, saya bahkan mencoba menyimpannya di
localStorage
(meski saya tahu ini tidak aman) hanya untuk memastikanverifier
tidak berubah, dan hasilnya tetap sama.
- Saya telah mencoba menyimpannya di server-side session (menggunakan
-
Platform & Bahasa Pemrograman: Saya telah mencoba mengimplementasikan alur ini menggunakan dua platform berbeda untuk mengesampingkan masalah library:
- Golang: Menggunakan package
golang.org/x/oauth2
denganSetAuthURLParam
untuk PKCE, dan juga implementasi vanilla (manual) menggunakanhttp.Client
. - JavaScript (Node.js): Menggunakan
axios
untuk melakukan request manual.
- Golang: Menggunakan package
-
Detail Request: Saya telah memverifikasi berulang kali bahwa request
POST
ke endpoint token sudah benar:- Header
Content-Type
disetel keapplication/json
. - Body JSON berisi semua field yang dibutuhkan:
grant_type: "authorization_code"
,code
,client_id
,client_secret
, dancode_verifier
.
- Header
Pertanyaan Saya:
Mengingat semua upaya di atas, saya curiga ada sesuatu yang saya lewatkan, terutama karena saya bekerja di lingkungan localhost
.
- Apakah ada konfigurasi khusus atau gotcha yang perlu diperhatikan saat melakukan otorisasi dari
localhost
? - Apakah ada detail spesifik terkait encoding
code_verifier
yang mungkin saya lewatkan (misalnya, masalah karakter khusus saat transit)? - Mungkinkah tim Scalev dapat membantu memeriksa log di sisi server untuk
client_id
saya untuk memberikan petunjuk yang lebih jelas mengenai penyebab kegagalan verifikasi PKCE tersebut?
Saya bersedia memberikan client_id
saya dan timestamp percobaan jika diperlukan untuk investigasi lebih lanjut.
Terima kasih banyak atas waktu dan bantuannya π