Rumah > hujung hadapan web > tutorial js > Menguasai JWT (Token Web JSON): A Deep Dive

Menguasai JWT (Token Web JSON): A Deep Dive

DDD
Lepaskan: 2025-01-21 20:37:10
asal
731 orang telah melayarinya

JSON Web Token (JWT): penyelesaian popular untuk pengesahan merentas domain

Artikel ini memperkenalkan prinsip dan penggunaan JSON Web Token (JWT), penyelesaian pengesahan merentas domain yang paling popular pada masa ini.

1. Cabaran pengesahan merentas domain

Perkhidmatan Internet tidak dapat dipisahkan daripada pengesahan pengguna. Proses tradisional adalah seperti berikut:

  1. Pengguna menghantar nama pengguna dan kata laluan ke pelayan.
  2. Selepas pengesahan pelayan berjaya, peranan pengguna, masa log masuk dan data lain yang berkaitan akan disimpan dalam sesi semasa.
  3. Pelayan mengembalikan session_id kepada pengguna dan menulisnya ke Kuki pengguna.
  4. Setiap permintaan seterusnya oleh pengguna akan menghantar session_id kembali ke pelayan melalui Cookie.
  5. Selepas pelayan menerima session_id, ia mencari data pra-simpan untuk mengenal pasti pengguna.

Model ini mempunyai kebolehskalaan yang lemah: persekitaran mesin tunggal adalah baik, tetapi kluster pelayan atau seni bina berorientasikan perkhidmatan merentas domain memerlukan perkongsian data sesi dan setiap pelayan boleh membaca sesi. Sebagai contoh, tapak web A dan tapak web B adalah perkhidmatan berkaitan syarikat yang sama Selepas pengguna log masuk ke salah satu tapak web, mereka boleh log masuk secara automatik apabila mereka melawat tapak web yang lain. Satu penyelesaian adalah untuk mengekalkan data sesi, menulisnya ke pangkalan data atau lapisan kegigihan lain dan meminta data daripada lapisan kegigihan selepas setiap perkhidmatan menerima permintaan. Penyelesaian ini mempunyai seni bina yang jelas, tetapi beban kerja adalah besar, dan kegagalan lapisan kegigihan akan membawa kepada satu titik kegagalan. Pilihan lain ialah pelayan tidak menyimpan data sesi sama sekali, semua data disimpan pada klien dan dihantar semula ke pelayan dengan setiap permintaan. JWT mewakili pendekatan ini.

2. Prinsip JWT

Prinsip JWT ialah pelayan menjana objek JSON selepas pengesahan dan mengembalikannya kepada pengguna, contohnya:

<code class="language-json">{"name": "Alice", "role": "admin", "expiration time": "2024年7月1日0:00"}</code>
Salin selepas log masuk
Salin selepas log masuk

Kemudian, apabila pengguna berkomunikasi dengan pelayan, objek JSON ini perlu dikembalikan dan pelayan menentukan sepenuhnya identiti pengguna berdasarkan objek ini. Untuk mengelakkan pengguna daripada mengganggu data, pelayan menambah tandatangan apabila menjana objek ini (butiran diterangkan kemudian). Pelayan tidak lagi menyimpan sebarang data sesi, iaitu pelayan menjadi tidak bernegara dan lebih mudah untuk skala.

3. Struktur data JWT

JWT sebenar kelihatan seperti ini:

Mastering JWT (JSON Web Tokens): A Deep Dive

Ia adalah rentetan panjang yang dipisahkan kepada tiga bahagian oleh titik (.). Ambil perhatian bahawa tiada pemisah baris di dalam JWT, pemisah baris di sini hanyalah untuk kemudahan paparan. Tiga bahagian JWT adalah seperti berikut:

  • Pengepala
  • Muat bayar
  • Tandatangan

Satu baris dinyatakan sebagai: Pengepala. Muatan. Tandatangan

Mastering JWT (JSON Web Tokens): A Deep Dive

Tiga bahagian ini diperkenalkan di bawah.

Pengepala 3.1

Bahagian Pengepala ialah objek JSON yang menerangkan metadata JWT, biasanya seperti berikut:

<code class="language-json">{"alg": "HS256", "typ": "JWT"}</code>
Salin selepas log masuk
Salin selepas log masuk

Atribut alg mewakili algoritma tandatangan, lalai ialah HMAC SHA256 (HS256); atribut taip mewakili jenis token ini dan token JWT ditulis secara seragam sebagai JWT. Objek JSON ini akhirnya ditukar kepada rentetan menggunakan algoritma Base64URL (butiran di bawah).

3.2 Muatan

Bahagian Payload juga merupakan objek JSON yang digunakan untuk menyimpan data sebenar yang perlu dihantar. JWT mentakrifkan 7 medan pilihan rasmi:

  • iss (pengeluar): Pengeluar
  • masa tamat tempoh (masa tamat tempoh): masa tamat tempoh
  • subjek (subjek): subjek
  • audiens (khalayak): penonton
  • nbf (Bukan Sebelum): masa berkesan
  • iat (Dikeluarkan Pada): Masa pengeluaran
  • jti (ID JWT): nombor siri

Selain medan rasmi, medan persendirian juga boleh disesuaikan. Contohnya:

<code class="language-json">{"name": "Alice", "role": "admin", "expiration time": "2024年7月1日0:00"}</code>
Salin selepas log masuk
Salin selepas log masuk

Perhatikan bahawa JWT tidak disulitkan secara lalai dan boleh dibaca oleh sesiapa sahaja, jadi jangan letak maklumat rahsia dalam bahagian ini. Objek JSON ini juga perlu ditukar kepada rentetan menggunakan algoritma Base64URL.

3.3 Tandatangan

Bahagian Tandatangan ialah tandatangan dua bahagian pertama, digunakan untuk mengelakkan gangguan data. Pertama, anda perlu menentukan rahsia ini hanya diketahui oleh pelayan dan tidak boleh dibocorkan kepada pengguna. Kemudian gunakan algoritma tandatangan yang dinyatakan dalam Pengepala (lalai ialah HMAC SHA256) untuk menjana tandatangan mengikut formula berikut:

<code class="language-json">{"alg": "HS256", "typ": "JWT"}</code>
Salin selepas log masuk
Salin selepas log masuk

Selepas tandatangan dikira, tiga bahagian Pengepala, Muatan dan Tandatangan digabungkan menjadi rentetan, dan setiap bahagian dipisahkan dengan "titik" (.), yang boleh dikembalikan kepada pengguna.

3.4 Base64URL

Seperti yang dinyatakan sebelum ini, algoritma siri Pengepala dan Muatan ialah Base64URL. Algoritma ini pada asasnya serupa dengan algoritma Base64, tetapi mempunyai beberapa perbezaan kecil. Sebagai tanda, JWT kadangkala boleh diletakkan dalam URL (seperti api.example.com/?token=xxx Tiga aksara dalam Base64, / dan = mempunyai makna istimewa dalam URL dan perlu diganti: = is ditinggalkan dan digantikan dengan Digantikan dengan -, / digantikan dengan _. Ini ialah algoritma Base64URL.

4. Cara menggunakan JWT

Selepas pelanggan menerima JWT yang dikembalikan oleh pelayan, ia boleh menyimpannya dalam Cookie atau localStorage. Pelanggan perlu membawa JWT ini setiap kali ia berkomunikasi dengan pelayan. Ia boleh diletakkan dalam kuki dan dihantar secara automatik, tetapi ini tidak boleh dilakukan merentas domain. Pendekatan yang lebih baik ialah meletakkannya dalam medan Kebenaran pengepala permintaan HTTP:

Kebenaran: Pembawa

Pendekatan lain ialah meletakkan JWT dalam kandungan permintaan POST apabila melintasi domain.

5. Beberapa ciri JWT

(1) JWT tidak disulitkan secara lalai, tetapi boleh disulitkan. Selepas Token asal dijana, ia boleh disulitkan semula dengan kunci.

(2) Jika JWT tidak disulitkan, data rahsia tidak boleh ditulis.

(3) JWT boleh digunakan bukan sahaja untuk pengesahan identiti, tetapi juga untuk pertukaran maklumat. Penggunaan JWT yang berkesan boleh mengurangkan bilangan kali pelayan menanyakan pangkalan data.

(4) Kelemahan terbesar JWT ialah pelayan tidak menyimpan keadaan sesi dan tidak boleh membatalkan token atau menukar kebenaran token semasa penggunaan. Iaitu, sebaik sahaja JWT dikeluarkan, ia kekal sah sehingga tamat tempoh melainkan pelayan menggunakan logik tambahan.

(5) JWT sendiri mengandungi maklumat pengesahan, dan apabila bocor, sesiapa sahaja boleh mendapatkan semua kebenaran token. Untuk mengurangkan kecurian, tempoh sah JWT hendaklah ditetapkan secara relatifnya singkat. Untuk beberapa kebenaran yang lebih penting, pengguna harus mengesahkan semula apabila menggunakannya.

(6) Untuk mengurangkan kecurian, JWT tidak boleh dihantar dalam teks yang jelas menggunakan protokol HTTP, tetapi harus dihantar menggunakan protokol HTTPS.

Leapcell: Platform Pengehosan Web Tanpa Pelayan Terbaik

Mastering JWT (JSON Web Tokens): A Deep Dive

Akhir sekali, saya mengesyorkan platform terbaik untuk menggunakan perkhidmatan web: Leapcell

1. Sokongan berbilang bahasa

  • Bangun dalam JavaScript, Python, Go atau Rust.

2. Sebarkan projek tanpa had secara percuma

  • Bayar hanya untuk apa yang anda gunakan – tiada permintaan, tiada bayaran.

3. Keberkesanan kos yang tiada tandingan

  • Bayar semasa anda pergi, tiada yuran terbiar.
  • Contoh: $25 menyokong 6.94 juta permintaan dengan purata masa tindak balas 60ms.

4. Pengalaman pembangun yang dipermudahkan

  • UI intuitif, mudah disediakan.
  • Saluran paip CI/CD automatik sepenuhnya dan penyepaduan GitOps.
  • Metrik masa nyata dan pengelogan untuk mendapatkan cerapan yang boleh diambil tindakan.

5. Pengembangan yang mudah dan prestasi tinggi

  • Peluasan automatik untuk mengendalikan konkurensi tinggi dengan mudah.
  • Sifar operasi overhed - hanya fokus pada pembinaan.

Mastering JWT (JSON Web Tokens): A Deep Dive

Ketahui lebih lanjut dalam dokumentasi!

Twitter Leapcell: https://www.php.cn/link/7884effb9452a6d7a7a79499ef854afd

Atas ialah kandungan terperinci Menguasai JWT (Token Web JSON): A Deep Dive. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan