Learn-json-web-tokens: Mengapa "penggunaan tunggal" dapat menyelesaikan MITM?

Dibuat pada 12 Mar 2017  ·  5Komentar  ·  Sumber: dwyl/learn-json-web-tokens

Bagian tentang MITM(Man-in-the-MiddleAttack) mengatakan bahwa "gunakan token sekali pakai (sekali pakai) (yang kedaluwarsa setelah tautan diklik)" adalah solusi dari MITM.

Pertanyaan saya adalah jika token hanya digunakan sekali, itu akan menyebabkan pengguna harus login lagi setiap kali permintaan dikirim. Di sisi lain, jika server menghancurkan token dan mengembalikan token baru setiap kali, token baru masih bisa dicegat oleh perantara.

Jika saya salah, tolong beri tahu saya, terima kasih!

question

Komentar yang paling membantu

@NE-SmallTown saya minta maaf karena tidak segera membalas.
Spesifikasi JWT tidak memiliki klaim/mekanisme untuk pembatalan sekali pakai
lihat: http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#RegisteredClaimName

@jbspeakr memiliki posting tentang cara menggunakan JWT,
lihat: https://www.jbspeakr.cc/howto-single-use-jwt/

Semua 5 komentar

@NE-SmallTown pertanyaan bagus.
Menggunakan token sekali pakai adalah praktik yang baik untuk keamanan aplikasi.
Jika Anda ingin menggunakan pola ini, Anda dapat mengatur pengait onPreResponse yang secara otomatis memperbarui JWT untuk setiap respons.

pertanyaan yang harus Anda jawab adalah: bagaimana Anda berencana memastikan bahwa token _tidak_ digunakan kembali?
Anda perlu menyimpan pengidentifikasi di semacam basis data (_kami biasanya menggunakan redis untuk ini di aplikasi kami_) dan memeriksa apakah token telah digunakan.

@nelsonic Terima kasih atas balasan Anda. Saya sedikit bingung.

Ada pertanyaan.

Seperti yang Anda katakan, prosesnya adalah:

pengguna mengakses halaman beranda dan mengirim token di header (dengan asumsi mereka telah masuk)

                                       |
                                       |
                                       ↓

server menerima token dan kemudian mendapatkan userId dengan mendekode token, dan kemudian pergi ke database (dengan asumsi saya menggunakan database daripada redis ) untuk mengambil token yang sesuai dari userId , lalu periksa apakah keduanya sama dengan menggunakan operator == ya, hancurkan token dan buat token baru dan dorong ke database dan tanggapi serta data ke klien.

Ada pertanyaan, kami hanya menggunakan operator == untuk memeriksa, tetapi kami tahu bahwa token itu sendiri memiliki mekanisme verifikasi, kami tidak menggunakannya ? mis:

JWT.require(Algorithm.RSA256((RSAKey) publicKey))
                .withIssuer("auth")
                .withSubject("ne-smalltown")
                .withAudience(userId)
                .withArrayClaim("jwt-role", userRole)
                .build()

Jika saya salah, dapatkah Anda memberi tahu saya bagaimana dan di mana menggunakan mekanisme verifikasi token itu sendiri seperti di atas?

IMO, satu-satunya tempat saya dapat menggunakan mekanisme verifikasi token itu sendiri adalah di mana saya mendapatkan parameter exp token lama dan memasukkannya ke token baru sehingga saya dapat memeriksa apakah token tersebut kedaluwarsa untuk membuat pengguna masuk kembali.

                                        |
                                        |
                                        ↓

Klien menerima token baru dan mendorongnya ke localstorage untuk menggantikan token lama. Dan pada permintaan berikutnya, klien akan menggunakannya.

@nelsonic Halo?

@NE-SmallTown saya minta maaf karena tidak segera membalas.
Spesifikasi JWT tidak memiliki klaim/mekanisme untuk pembatalan sekali pakai
lihat: http://self-issued.info/docs/draft-ietf-oauth-json-web-token.html#RegisteredClaimName

@jbspeakr memiliki posting tentang cara menggunakan JWT,
lihat: https://www.jbspeakr.cc/howto-single-use-jwt/

@nelsonic Terima kasih telah membagikan posnya.

Postingan mengatakan:

Secara teori, ini juga berfungsi dengan kasus penggunaan selain token setel ulang kata sandi, misalnya aktivasi email, konfirmasi akun account

Saya setuju bahwa kasus-kasus ini cocok untuk jwt sekali pakai, tetapi kasus saya adalah jwt menyertakan informasi peran pengguna dan perannya konstan , tidak suka pengaturan ulang kata sandi, aktivasi email, konfirmasi akun, dll.

Jadi, kembali ke pertanyaan, dalam kasus saya, sekarang saya pikir tidak perlu memverifikasi token, cukup gunakan operator == dengan token database.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

rhewitt22 picture rhewitt22  ·  5Komentar

nelsonic picture nelsonic  ·  5Komentar

alanshaw picture alanshaw  ·  6Komentar

nelsonic picture nelsonic  ·  4Komentar

rjmk picture rjmk  ·  9Komentar