Rumah >hujung hadapan web >tutorial js >Menggunakan token web JSON dengan node.js

Menggunakan token web JSON dengan node.js

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌asal
2025-02-08 10:26:19252semak imbas

Using JSON Web Tokens with Node.js

Pengesahan API adalah salah satu cabaran terbesar ketika membina API dan salah satu kelemahan keselamatan terbesar API. Mekanisme pengesahan yang betul membantu mengelakkan ancaman keselamatan dan memastikan hanya pengguna yang diberi kuasa dapat mengakses data yang diperlukan.

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.

Walau bagaimanapun, untuk API, anda tidak boleh melaksanakan sesi. Anda tidak boleh menjamin bahawa API anda sentiasa dipanggil menggunakan pelayar web, jadi anda tidak boleh bergantung pada kuki untuk melindungi API anda. Salah satu ciri utama API adalah ketiadaannya, yang bermaksud bahawa setiap permintaan yang dihantar ke API tidak bergantung pada permintaan sebelumnya atau berikutnya. Oleh itu, anda memerlukan cara untuk membawa maklumat pengesahan/kebenaran yang diperlukan untuk permintaan pengesahan.

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

    Melaksanakan JWT untuk memastikan komunikasi yang selamat.
  1. Artikel ini menyediakan panduan mendalam mengenai pelaksanaan JWT untuk pengesahan dalam aplikasi web. Ini termasuk penjanaan token, penghantaran dan pengesahan. Melakukannya meningkatkan keselamatan API secara keseluruhan dengan menghalang kawalan akses yang melanggar dan membenarkan hanya kakitangan yang diberi kuasa untuk mengakses data.
  2. Kawalan akses berasaskan peranan dalam JWT.
  3. Artikel ini menunjukkan gambaran keseluruhan kawalan akses berasaskan peranan di mana titik akhir API tertentu terhad kepada akses peranan tertentu. Sebagai contoh, pentadbir boleh melihat semua pengguna, sementara pelanggan tidak boleh. Artikel ini melakukan ini dengan menguruskan pengisytiharan tersuai dalam token JWT.
  4. Melaksanakan JWT di API REST.
  5. Artikel ini menyediakan pendekatan langkah demi langkah untuk membina API REST yang mudah untuk pengesahan JWT menggunakan perpustakaan Node.js, Express, dan JsonWebtoken. Ini termasuk menyediakan projek, memasang perpustakaan yang diperlukan, mewujudkan pangkalan data pengguna asas, dan melaksanakan titik akhir log masuk dan pengguna data. Proses ini melibatkan menghasilkan token apabila pengguna log masuk dan mengesahkan token ini dalam permintaan berikutnya untuk memberi kuasa atau menafikan akses berdasarkan peranan pengguna.
Apakah Token Web JSON (JWT)?

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.

  1. Pengesahan/kebenaran. Ini adalah salah satu kes penggunaan yang paling banyak diterima untuk JWT. Anda boleh membina token pengesahan untuk mengesahkan permintaan pada API dan pastikan pengguna yang diberi kuasa melakukan operasi kebenaran.
  2. Exchange Maklumat. Anda juga boleh menggunakan JWT untuk menukar maklumat dengan selamat antara kedua -dua pihak. Mereka berfungsi sebagai bentuk data yang sah dan boleh diterima kerana JWTS boleh ditandatangani. Sebagai contoh, menggunakan pasangan kunci awam/swasta, anda boleh memastikan bahawa penghantar adalah orang yang mereka panggil sendiri. Ini membolehkan anda melakukan pemeriksaan tambahan untuk memastikan bahawa maklumat anda belum diganggu.
Struktur token JWT

Untuk melaksanakan semua fungsi, struktur token JWT adalah khusus. Ia mempunyai tiga komponen utama:

    header. Header
  1. mengandungi dua bahagian: jenis token JWT dan algoritma tandatangan yang digunakan, seperti HMAC SHA256 atau RSA.
  2. muatan.
  3. muatan mengandungi pernyataan anda. Kenyataan adalah maklumat yang menerangkan entiti yang anda mengeluarkan token. Sebagai contoh, jika anda mengeluarkan tanda kepada pengguna, akan ada kenyataan seperti ID pengguna dan peranan. Di samping itu, token JWT juga mempunyai satu set penyata standard, seperti penerbit, masa terbitan, masa tamat, dll.
  4. tandatangan.
  5. Inilah yang perlu anda buat. Untuk membuat tandatangan, anda mesti mengambil dan menandatangani tajuk yang dikodkan, muatan yang dikodkan, kunci, dan algoritma yang ditentukan dalam tajuk. Ini dilakukan untuk memastikan mesej itu tidak berubah semasa penghantaran.
NOTA: Token JWT anda adalah rentetan base64 mudah yang mengandungi ketiga -tiga komponen ini, masing -masing dipisahkan oleh

. . 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. Using JSON Web Tokens with Node.js

Proses JWT

Sekarang, apabila anda membina API menggunakan JWT, anda perlu mempertimbangkan perkara berikut:

Login

    Generasi Token
  1. Pengesahan token
  2. Ini mungkin sama dengan yang ditunjukkan dalam angka berikut.

Loop bermula apabila pengguna mengemukakan permintaan untuk log masuk ke API untuk kali pertama. Mereka menyediakan nama pengguna dan kata laluan. API anda mengesahkan bahawa kelayakan adalah sah dan, jika ya, menghasilkan token JWT untuk pengguna.

Using JSON Web Tokens with Node.js 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

index.js (Cadangan Cadangan untuk Bahagian Utama):

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>
Reka bentuk pangkalan data:

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:

  • Gunakan algoritma penyulitan yang lebih kuat.
  • Gunakan HTTPS.
  • Melaksanakan kawalan akses berbutir yang lebih baik.
  • kerap memutar kekunci.
  • Gunakan algoritma hashing kata laluan yang lebih selamat (mis. Bcrypt).
  • Menggunakan kadar yang mengehadkan untuk mengelakkan retak kekerasan.

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!

Kenyataan:
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