Saya sedang membangun aplikasi seluler dan menggunakan JWT untuk otentikasi.
Sepertinya cara terbaik untuk melakukannya adalah dengan memasangkan token akses JWT dengan token penyegaran sehingga saya dapat mengakhiri token akses sesering yang saya inginkan.
- Seperti apa bentuk token penyegaran? Apakah itu string acak? Apakah string itu dienkripsi? Apakah itu JWT lain?
- Token penyegaran akan disimpan dalam database pada model pengguna untuk akses, benar? Sepertinya itu harus dienkripsi dalam kasus ini
- Apakah saya akan mengirim token penyegaran kembali setelah pengguna masuk, dan kemudian meminta klien mengakses rute terpisah untuk mengambil token akses?
security
authentication
oauth-2.0
jwt
jtmarmon.dll
sumber
sumber
Jawaban:
Dengan asumsi ini tentang OAuth 2.0 karena ini tentang JWT dan token penyegaran ...:
seperti token akses, pada prinsipnya token penyegaran dapat berupa apa saja termasuk semua opsi yang Anda gambarkan; JWT dapat digunakan saat Server Otorisasi ingin menjadi tanpa kewarganegaraan atau ingin menerapkan semacam semantik "bukti kepemilikan" ke klien yang menampilkannya; perhatikan bahwa token penyegaran berbeda dari token akses karena tidak disajikan ke Server Sumber Daya tetapi hanya ke Server Otorisasi yang menerbitkannya di tempat pertama, sehingga pengoptimalan validasi mandiri untuk JWTs-as-access-token tidak tidak tahan untuk token penyegaran
itu tergantung pada keamanan / akses database; jika database dapat diakses oleh pihak / server / aplikasi / pengguna lain, maka ya (tetapi jarak tempuh Anda mungkin berbeda dengan di mana dan bagaimana Anda menyimpan kunci enkripsi ...)
Server Otorisasi dapat mengeluarkan token akses dan token penyegaran pada saat yang sama, tergantung pada hibah yang digunakan oleh klien untuk mendapatkannya; spesifikasi berisi detail dan opsi untuk setiap hibah standar
sumber
Berikut adalah langkah-langkah untuk mencabut token akses JWT Anda:
Tolong beri tahu saya jika Anda memerlukan detail lebih lanjut, saya juga dapat membagikan kode (Java + Spring boot).
Untuk pertanyaan Anda:
Q1: Ini adalah JWT lain dengan lebih sedikit klaim yang dimasukkan dengan waktu kedaluwarsa yang lama.
T2: Ini tidak akan ada di database. Backend tidak akan disimpan di mana pun. Mereka hanya akan mendekripsi token dengan kunci privat / publik dan memvalidasinya dengan waktu kadaluwarsa juga.
T3: Ya, Benar
sumber
localStorage
danrefreshToken
harus disimpan dalam filehttpOnly
. TherefreshToekn
dapat digunakan untuk mendapatkan JWT baru sehingga harus ditangani dengan ekstra hati-hati.Berdasarkan implementasi ini dengan Node.js dari JWT dengan token penyegaran :
1) Dalam hal ini mereka menggunakan uid dan itu bukan JWT. Saat mereka menyegarkan token, mereka mengirim token penyegaran dan pengguna. Jika Anda menerapkannya sebagai JWT, Anda tidak perlu mengirim pengguna, karena itu akan berada di dalam JWT.
2) Mereka menerapkan ini dalam dokumen terpisah (tabel). Masuk akal bagi saya karena pengguna dapat masuk di aplikasi klien yang berbeda dan dapat memiliki token penyegaran berdasarkan aplikasi. Jika pengguna kehilangan perangkat dengan satu aplikasi terpasang, token penyegaran perangkat tersebut dapat menjadi tidak valid tanpa memengaruhi perangkat lain yang masuk.
3) Dalam implementasi ini, ia menanggapi metode masuk dengan token akses dan token penyegaran. Ini jahitan yang benar bagi saya.
sumber
iat
dengan jendela)JWT
Anda maksudkanrefresh_token
di dalamnya? Jika demikian, OAuth RFC 6749 secara eksplisit mengatakan untuk tidak mengirimrefresh_token
ke server sumber daya (danJWT
dikirim ke server sumber daya): tools.ietf.org/html/rfc6749#section-1.5