Saya sedang membangun API yang tenang yang menggunakan token JWT untuk otentikasi pengguna (dikeluarkan oleh login
titik akhir dan mengirim semua header setelah itu), dan token harus di-refresh setelah jumlah waktu yang tetap (menggunakan renew
titik akhir, yang mengembalikan token yang diperbarui ).
Mungkin saja sesi API pengguna menjadi tidak valid sebelum token berakhir, karenanya semua titik akhir saya mulai dengan memeriksa bahwa: 1) token masih valid dan 2) sesi pengguna masih valid. Tidak ada cara untuk membatalkan token secara langsung, karena klien menyimpannya secara lokal.
Oleh karena itu, semua titik akhir saya harus memberi sinyal kepada klien saya tentang dua kondisi yang mungkin: 1) bahwa sudah waktunya untuk memperbarui token atau 2) bahwa sesi menjadi tidak valid, dan mereka tidak lagi diizinkan untuk mengakses sistem. Saya dapat memikirkan dua alternatif untuk titik akhir saya untuk memberi sinyal kepada klien mereka ketika salah satu dari dua kondisi terjadi (asumsikan bahwa klien dapat disesuaikan dengan salah satu opsi):
- Kembalikan kode http 401 (tidak resmi) jika sesi menjadi tidak valid atau kembalikan kode 412 (prasyarat gagal) ketika token telah kedaluwarsa dan sudah waktunya untuk memanggil
renew
titik akhir, yang akan mengembalikan kode 200 (ok). - Kembalikan 401 untuk memberi isyarat bahwa sesi tidak valid atau token telah kedaluwarsa. Dalam hal ini klien akan segera memanggil
renew
titik akhir, jika mengembalikan 200 maka token di-refresh, tetapi jikarenew
juga mengembalikan 401 maka itu berarti bahwa klien keluar dari sistem.
Manakah dari dua alternatif di atas yang akan Anda rekomendasikan? Yang mana yang lebih standar, lebih sederhana untuk dipahami, dan / atau lebih tenang? Atau apakah Anda akan merekomendasikan pendekatan yang berbeda sama sekali? Apakah Anda melihat masalah yang jelas atau risiko keamanan dengan salah satu opsi? Poin tambahan jika jawaban Anda menyertakan referensi eksternal yang mendukung pendapat Anda.
MEMPERBARUI
Guys, tolong fokus pada pertanyaan sebenarnya - mana dari dua alternatif kode http untuk menandakan perpanjangan / sesi invalidasi adalah yang terbaik? Jangan pedulikan fakta bahwa sistem saya menggunakan JWT dan sesi sisi server, itu adalah kekhasan API saya untuk aturan bisnis yang sangat spesifik, dan bukan bagian yang saya cari bantuannya;)