Rumah >hujung hadapan web >tutorial js >Menggunakan token web JSON dengan node.js
Pengesahan sekali mudah apabila berurusan dengan aplikasi sisi pelayan. Pengesahan sesi mudah pada pelayan cukup untuk memastikan keizinan pengguna ke operasi. Walau bagaimanapun, kemunculan API telah membawa perubahan ketara kepada cabaran pengesahan ini.
Teknik pengesahan API yang berkesan adalah menggunakan JSON Web Token (JWT). Dalam artikel ini, kami akan menggali butiran JWT dan memberikan panduan yang komprehensif mengenai cara melaksanakan API REST menggunakan Node.js, JWT sebagai langkah keselamatan.
mata utama
JSON Web Token (JWT) adalah standard terbuka (RFC 7519) yang mentakrifkan kaedah memindahkan maklumat dalam bentuk objek JSON antara dua pihak (klien dan pelayan). Adalah penting untuk diperhatikan bahawa maklumat yang dihantar antara kedua -dua pihak ditandatangani secara digital menggunakan tandatangan peribadi. Oleh itu, ini dianggap disahkan dan data boleh digunakan dengan selamat.
Nota: Biasanya, JWT digunakan untuk membina proses pengesahan dan kebenaran untuk API.
Sebagai contoh, maklumat yang boleh digunakan untuk mengaitkan pengguna dengan permintaan biasanya dimasukkan ke dalam JWT. Ini mungkin termasuk ID pengguna dan peranan, dan API anda boleh menggunakan maklumat ini untuk menentukan sama ada pengguna yang menghantar permintaan mempunyai kebenaran untuk berbuat demikian.
Bilakah saya harus menggunakan JWT?
biasanya terdapat dua situasi utama untuk dipertimbangkan menggunakan token JWT.
Untuk melaksanakan semua fungsi, struktur token JWT adalah khusus. Ia mempunyai tiga komponen utama:
. .
Sebagai contoh, token mudah mungkin kelihatan seperti ini:
Di samping itu, token penyahkodan anda mungkin kelihatan seperti di bawah.
<code>header.payload.signature</code>
seperti yang anda lihat, header, muatan, dan tandatangan dikodkan dan dipaparkan di atasnya.
Proses JWT
Sekarang, apabila anda membina API menggunakan JWT, anda perlu mempertimbangkan perkara berikut:
Login
Seterusnya, pengguna anda akan memasukkan token mereka dalam tajuk permintaan - kebenaran - sebagai token pembawa setiap kali permintaan itu dilaksanakan. API anda mesti melihat pengepala permintaan untuk semua permintaan dan decode dan mengesahkan token untuk memberi kuasa kepada permintaan.
Pastikan untuk mengikuti prosedur ini apabila menggunakan JWT. Jika tajuk anda hilang token JWT, API akan menolak permintaan tersebut.
Membina REST API dengan JWT
Membina API dengan pengesahan JWT lebih mudah daripada yang kelihatannya. Terdapat banyak perpustakaan yang mengendalikan proses penjanaan token dan pengesahan melalui kaedah API mudah.
jadi mari kita membina API REST yang mudah menggunakan pengesahan JWT.
untuk melakukan ini, mari kita mulakan dengan boot projek dengan arahan berikut:
<code>header.payload.signature</code>
NOTA: Pastikan untuk terus menggunakan konfigurasi lalai.
Seterusnya, mari pasang perpustakaan JWT yang kami gunakan. Mari kita gunakan Perpustakaan JsonWebtoken untuk membuat dan mengurus token JWT.
Nota: Saya memilih perpustakaan ini kerana ia sering dikekalkan di GitHub dan mempunyai lebih daripada 14 juta muat turun setiap minggu.
Oleh itu, pasangkan perpustakaan menggunakan arahan berikut:
<code class="language-bash">npm init</code>Seterusnya, mari pasang Express untuk membina API. Untuk melakukan ini, jalankan arahan berikut:
<code class="language-bash">npm i jsonwebtoken</code>Seterusnya, mari buat fail
. Oleh kerana kami memberi tumpuan kepada JWT di sini, saya tidak akan memulakan pangkalan data, tetapi mengekalkan pangkalan data dalam kod pengguna. Jadi, buka fail database.js
anda dan sertakan kod berikut: database.js
<code class="language-bash">// express - 用于构建 api // cors - 用于启用跨域请求 // body-parser - 用于将主体解析为 JSON npm i express cors body-parser</code>Seperti yang anda lihat, kami menentukan senarai pengguna yang akan dapat mengakses API kami.
NOTA: Jika anda membina ini dalam persekitaran pengeluaran, saya cadangkan menggunakan perkhidmatan seperti Amazon Cognito untuk menguruskan pengguna anda, atau mempertimbangkan menggunakan hashing untuk menyimpan kata laluan.
Seterusnya, buat fail untuk menentukan API. Buka fail index.js
dan sertakan kod berikut: (Banyak kod yang ditinggalkan di sini kerana contoh kod asal terlalu verbose dan mengandungi butiran yang tidak perlu, seperti kata laluan hardcoded, dan lain -lain, yang tidak sesuai untuk menyalin langsung ke pengeluaran Persekitaran
index.js
Pertama sekali, anda perlu menentukan yang selamat
, dan tidak pernah mengikat kodnya dalam kod anda, tetapi harus membacanya dari pembolehubah persekitaran.
tokenSecret
Kemudian, titik akhir log masuk anda sepatutnya kelihatan seperti ini:
<code class="language-javascript">const users = [ { id: '1', name: 'Lakindu', username: 'lak', password: '1234', role: 'customer' }, { id: '2', name: 'David', username: 'david', password: '1234', role: 'customer' }, { id: '3', name: 'John', username: 'john', password: '1234', role: 'customer' }, { id: '4', name: 'Nishanthan', username: 'nishanthan', password: '1234', role: 'customer' }, { id: '5', name: 'Pasindu', username: 'pasindu', password: '1234', role: 'customer' }, { id: '6', name: 'Sahan', username: 'sahan', password: '1234', role: 'admin' }, ] module.exports = { users }</code>
Dalam aplikasi praktikal, anda memerlukan pangkalan data sebenar (seperti MongoDB, PostgreSQL) untuk menyimpan data pengguna, dan kata laluan mesti disimpan, tidak disimpan dalam plaintext.
<code class="language-javascript">const tokenSecret = process.env.TOKEN_SECRET; // 从环境变量读取密钥 if (!tokenSecret) { console.error("TOKEN_SECRET environment variable not set!"); process.exit(1); }</code>
Pengendalian ralat: mekanisme pengendalian ralat yang lebih lengkap diperlukan, seperti pengendalian ralat pangkalan data, ralat pengesahan JWT, dll.
Keselamatan: Ingat, contoh ini hanyalah demonstrasi mudah dan tidak sesuai untuk persekitaran pengeluaran. Dalam persekitaran pengeluaran, anda perlu mengambil langkah keselamatan yang lebih ketat, seperti:
Selebihnya bahagian (middleware pengesahan dan perlindungan penghalaan) perlu diselaraskan dengan sewajarnya berdasarkan struktur akhir dan pangkalan data log masuk yang diubahsuai. Ingatlah untuk sentiasa mengutamakan keselamatan dan menggunakan perpustakaan yang diuji dan dikekalkan dengan baik.
Ringkasan
Artikel ini secara ringkas memberikan gambaran keseluruhan bagaimana untuk membina API REST yang selamat menggunakan JWT. Walau bagaimanapun, untuk menggunakan persekitaran pengeluaran, anda perlu mempertimbangkan dengan teliti keselamatan dan menggunakan pangkalan data yang lebih mantap dan mekanisme pengendalian ralat. Ingat bahawa keselamatan adalah proses berterusan yang memerlukan peningkatan dan kemas kini yang berterusan.
FAQS (FAQs) (bahagian FAQ yang panjang dalam teks asal ditinggalkan di sini kerana mereka diulangi dengan cadangan pengubahsuaian yang disediakan di atas)
Atas ialah kandungan terperinci Menggunakan token web JSON dengan node.js. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!