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_verifierdancode_challenge(SHA256, Base64-URL-encoded) dengan benar. - Step 3 (Authorization Request): Saya berhasil mengarahkan pengguna ke
https://app.scalev.id/oauth/authorizedengan parameter yang lengkap, termasukcode_challengedancode_challenge_method=S256. - Step 4 & 5 (User Authorization & Callback): Pengguna berhasil login, menyetujui aplikasi saya, dan saya berhasil menerima
codedanstatediredirect_uriyang telah saya daftarkan. Verifikasistatejuga 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_verifieryang 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-sessiondi 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 memastikanverifiertidak 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/oauth2denganSetAuthURLParamuntuk PKCE, dan juga implementasi vanilla (manual) menggunakanhttp.Client. - JavaScript (Node.js): Menggunakan
axiosuntuk melakukan request manual.
- Golang: Menggunakan package
-
Detail Request: Saya telah memverifikasi berulang kali bahwa request
POSTke endpoint token sudah benar:- Header
Content-Typedisetel 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_verifieryang mungkin saya lewatkan (misalnya, masalah karakter khusus saat transit)? - Mungkinkah tim Scalev dapat membantu memeriksa log di sisi server untuk
client_idsaya 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 🙏
