Spesifikasi JWT hanya menjelaskan muatan dan cara pengirimannya, tetapi membiarkan protokol otentikasi tetap terbuka, yang memungkinkan fleksibilitas, tetapi sayangnya, fleksibilitas dapat mengarah pada antiputerns dan misdesign.
Saya mencari beberapa pemikiran yang baik dan diuji coba perusahaan untuk otentikasi JWT, yang bisa saya gunakan atau adaptasi, tetapi saya gagal menemukan sesuatu yang lengkap.
Apa yang saya pikirkan adalah:
- ketika tidak ada tajuk Otorisasi terpenuhi, atau token JWT tidak valid, atau kedaluwarsa, kirim HTTP 401
- untuk mengotentikasi, gunakan / masuk saluran REST, kirim nama pengguna dan kata sandi sebagai objek JSON
- untuk menjaga token tetap hidup, gunakan / keepalive REST channel, panggil setiap N (5) menit, terima token JWT baru dan ganti yang ada setelah setiap panggilan (token berakhir setelah M (15) menit)
Namun, yang mengganggu saya, adalah perlunya saluran / keepalive itu. Di sisi lain, itu memaksa saya untuk mencegah otentikasi berakhir, bahkan jika pengguna pergi (keputusan, jika kita ingin keepalive belum terpenuhi) dan tentu saja, itu adalah panggilan tambahan dan komplikasi tambahan untuk protokol. Yang menarik, server itu secara otomatis memperpanjang token. Di lingkungan berbasis sesi, hal itu terjadi dengan menyetel ulang stempel waktu, namun, di sini server harus mengirim token baru, mungkin tidak setiap kali, tetapi begitu token akan kedaluwarsa dalam R (katakanlah, 10) menit. Tetapi menempatkannya di badan respons akan berarti memodifikasi protokol respons JSON (oleh karena itu, solusinya invasif dan tidak transparan), dan menempatkan header HTTP tambahan yang dapat diproses klien tidak serta merta merupakan pola yang baik. SAYA'
Apakah ada pola perusahaan siap yang menjawab poin terbuka saya? Apakah draft protokol saya ide yang dapat diandalkan? Saya lebih suka menggunakan sesuatu yang siap daripada desain dari awal.