‫-: Jadi sebelumnya, kami
‫telah menerapkan fungsi pendaftaran sederhana, tetapi
‫dalam kuliah
‫ini, kami sebenarnya juga akan mencatat
‫pengguna dalam membuat proses pendaftaran yang lebih nyata.
‫Jadi mulai dari kuliah ini,
‫kami akan benar-benar mulai menerapkan otentikasi kami, dan
‫di sinilah hal itu menjadi sangat serius.
‫Oleh karena itu, sebelum kita mulai,
‫saya ingin memberi Anda peringatan di
‫sini, jadi otentikasi sangat sulit dilakukan dengan benar dan banyak tutorial
‫di luar sana yang akan Anda temukan ketika
‫Anda mencari otentikasi dengan
‫Node.js seperti itu. js dan
‫Express, banyak dari ini membuat banyak kesalahan
‫serius dan terlalu menyederhanakan hal-hal yang seharusnya tidak disederhanakan.
‫Baiklah, ini bukan untuk mengatakan bahwa semua tutorial
‫di luar
‫sana buruk, baiklah, atau
‫itu tidak berguna atau semacamnya, tetapi saya benar-benar menghabiskan waktu
‫berminggu-minggu untuk meneliti semua praktik
‫terbaik dan menyempurnakan serta
‫meningkatkan kode saya, untuk membuat bagian otentikasi ini
‫yang kami Kami akan mulai menerapkannya
‫sebaik mungkin, untuk pemula seperti Anda, baiklah, dan
‫itu karena kami harus benar-benar ekstra hati-hati saat menulis
‫bagian aplikasi ini, karena ingat, data pengguna kami dipertaruhkan di
‫sini , dan kepercayaan pada perusahaan yang
‫menjalankan aplikasi, juga
‫dipertaruhkan, dan karenanya menerapkan autentikasi,
‫adalah tanggung jawab nyata di
‫mana Anda tidak boleh membuat kesalahan sama sekali.
‫Sekarang ada beberapa perpustakaan
‫di luar sana yang dapat membantu
‫kami menerapkan otentikasi dan otorisasi dan yang paling
‫terkenal disebut Paspor, tetapi
‫bahkan perpustakaan seperti
‫itu tidak mengambil semua pekerjaan dan semua
‫tanggung jawab dari Anda, oke.
‫Sekarang dalam
‫kasus ini di sini, kita sebenarnya
‫akan menerapkan seluruh logika perlindungan dan otorisasi login sendiri, kecuali
‫tentu saja untuk implementasi token web Jason yang kita
‫bicarakan di video terakhir itu sendiri.
‫Oke, jadi semua penandatanganan dan verifikasi
‫semua itu, kita akan pergi ke perpustakaan WJT tapi
‫sisanya, kita akan menerapkan diri
‫kita sendiri selama beberapa kuliah berikutnya.
‫Sekarang seperti yang saya
‫sebutkan sebelumnya, kami sudah memiliki fungsi pendaftaran kami di
‫sini, benar, tetapi
‫sekarang, yang dilakukannya hanyalah membuat pengguna
‫baru dan kemudian mengirimkannya kembali ke klien.
‫Sekarang tidak lama setelah menyelesaikan perekaman kursus ini,
‫saya
‫benar-benar memperhatikan bahwa ada kelemahan
‫keamanan yang sangat serius dalam cara
‫mendaftarkan pengguna ini, jadi pada dasarnya
‫masalahnya adalah saat ini, kami membuat pengguna baru menggunakan
‫semua data yang masuk. badan
‫kan, jadi masalahnya di sini adalah seperti ini,
‫siapa pun dapat menentukan peran sebagai admin kan, jadi pada dasarnya,
‫semua orang sekarang dapat dengan mudah mendaftar sebagai admin ke
‫dalam aplikasi kita,
‫dan itu tentu saja tidak kita butuhkan.
‫Jadi sekali lagi ini adalah kelemahan keamanan yang serius
‫dan kami tentu saja harus memperbaikinya dan
‫untuk memperbaikinya sebenarnya cukup sederhana.
‫Jadi yang Anda butuhkan sebagai ganti baris kode ini,
‫yang dipilih di sini
‫adalah potongan kode yang baru saja saya taruh di sini di layar.
‫Oke.
‫Jadi sekali lagi, silakan dan hapus baris kode yang saat ini
‫dipilih di sini dan ganti
‫dengan kode yang baru saja saya taruh di
‫sini di layar.
‫Sekarang apa sebenarnya perbedaan besar di
‫sini, nah, dengan kode
‫baru ini, pada dasarnya kami hanya mengizinkan data yang sebenarnya
‫kami perlukan untuk dimasukkan ke
‫dalam pengguna baru jadi hanya nama, E-mail dan kemudian kata sandi.
‫Jadi sekarang, bahkan jika pengguna mencoba memasukkan peran secara manual,
‫kami tidak akan menyimpannya ke pengguna baru,
‫dan hal yang sama
‫untuk hal lain, seperti misalnya, foto.
‫Jadi ini adalah perbaikan cepat dan mudah untuk masalah itu.
‫Sekarang
‫apa yang akan dilakukan, adalah bahwa kita sebenarnya tidak dapat lagi
‫mendaftar sebagai admin, jadi jika kita perlu menambahkan
‫administrator baru ke
‫sistem kita, kita dapat dengan mudah membuat pengguna baru secara
‫normal dan kemudian masuk ke Kompas MongoDB,
‫dan pada dasarnya mengedit peran itu di sana.
‫Jadi edit dari
‫pengguna ke admin secara manual, oke.
‫Tentu saja kami juga dapat menentukan rute
‫khusus untuk hanya membuat
‫admin, tetapi itu akan menjadi terlalu berlebihan.
‫Oke, jadi sekarang mari kita lanjutkan.
‫Perhatikan saja bahwa kode di sisa video
‫dan semua video dalam kursus
‫ini tentu saja masih versi lama yang salah ini, baiklah, tetapi sebenarnya
‫dalam kode terakhir yang ada di
‫repositori GitHub, saya sudah
‫memperbaikinya dan kami memiliki kode yang benar di sana.
‫Lagi pula, biasanya ketika kita mendaftar untuk aplikasi web apa pun,
‫maka Anda juga masuk secara otomatis, kan, jadi mari
‫kita segera menerapkannya di sini.
‫Jadi login pengguna baru, segera
‫setelah dia mendaftar, oke, dan ingat dari
‫kuliah sebelumnya, cara kerjanya, yang
‫perlu kita lakukan hanyalah
‫menandatangani token web Jason
‫dan kemudian mengirimkannya kembali ke
‫pengguna , oke, tapi sekarang pertama-tama kita instal
‫paket MPM yang akan kita gunakan untuk
‫semua yang berhubungan dengan token
‫web Jason.
‫Jadi di terminal kami yang
‫lain, katakanlah menginstal MPM, token web Jason, jadi semua ini bersama-sama seperti
‫ini dan itu kemudian
‫harus menginstal paket ini dan mari
‫kita lanjutkan
‫dan lihat di GitHub, hanya untuk melihat
‫dokumentasi dan mari lakukan itu
‫di sini, setidaknya
‫kita tidak lagi membutuhkan yang ini di
‫sini untuk saat ini, jadi ini akan membawa kita ke halaman di MPM,
‫dan Anda melihat seberapa
‫populer paket ini sebenarnya, jadi
‫kami memiliki 2. 3 juta unduhan
‫mingguan, jadi itu benar-benar satu ton unduhan dan
‫kami juga dapat melihat dokumentasinya di sini,
‫tetapi saya pribadi lebih suka melakukannya di GitHub.
‫Saya pikir itu terlihat jauh lebih bersih
‫di sini, dan saya sudah
‫terbiasa pada saat ini, jadi saya biasanya hanya melihatnya di sini, oke.
‫Bagaimanapun, fungsi pertama yang akan kita
‫gunakan dengan JWT di sini adalah tanda, oke, jadi pada
‫dasarnya untuk membuat token baru, dan untuk itu tentu
‫saja kita membutuhkan payload, kita
‫memerlukan kunci sehingga rahasia pribadi yang saya sebutkan
‫sebelum itu
‫hanya disimpan di server kami dan kami
‫perlu menandatangani token dan kemudian
‫kami dapat meneruskan beberapa opsi dan
‫kami akan melakukan semua itu dalam
‫sedetik, saya hanya ingin menunjukkan fungsi lain yang kami
‫miliki di sini, dan bahwa kami benar-benar memiliki
‫banyak pilihan di sini, misalnya kedaluwarsa,
‫yang akan kita gunakan juga, jadi
‫semua hal ini dan
‫kemudian kita harus memverifikasi.
‫Jadi kami juga berbicara tentang proses verifikasi
‫dan itu pada dasarnya diimplementasikan dalam fungsi ini, oke, dan
‫inilah yang akan kami gunakan,
‫saat login pengguna, oke, dan hanya itu yang ada,
‫jadi Anda memiliki semua opsi
‫yang berbeda ini di sini, oke,
‫Anda juga telah memecahkan
‫kode tetapi yang itu tidak terlalu penting, oke,
‫jadi Anda melihat bahwa paket ini benar-benar hanya
‫mencakup dua
‫fungsi yang telah kita bahas di video sebelumnya.
‫Jadi menandatangani dan kemudian memverifikasi, oke.
‫Jadi mari kembali ke sini
‫dan mulai menggunakan paket token web Jason.
‫Jadi mari kita
‫impor di sini, dan biasanya hanya
‫disebut JWT dan memerlukan token web Jason.
‫Oke, jadi mari kita buat token kita di
‫sini, oke, dan
‫saya ingin menyebutnya seperti ini jadi token saja, oke,
‫lalu tanda titik JWT, dan sekarang yang pertama adalah payload, dan ini
‫pada dasarnya adalah objek untuk semua
‫data yang akan kita simpan
‫di dalam token, dan dalam hal ini,
‫kita
‫benar-benar hanya menginginkan ID pengguna, oke, jadi tidak ada
‫yang gila di sini, tidak banyak data
‫yang tidak terlalu penting.
‫Jadi kita katakan bahwa ID itu
‫dan kemudian kita hanya mendapatkan ID
‫dari pengguna baru yang baru saja dibuat, oke,
‫jadi pengguna baru titik dan kemudian ingat bahwa di MonogoDB, ID
‫sebenarnya disebut ID garis bawah, baiklah, dan begitu adalah objek
‫yang merupakan data, payload,
‫yang ingin kita masukkan ke dalam JWT kita.
‫Selanjutnya, kita perlu rahasianya, oke, jadi pada
‫dasarnya sebuah string
‫untuk sebuah rahasia, baiklah,
‫tentu saja ini mengerikan, baiklah, ini hanya semacam
‫penampung karena sebenarnya, file
‫konfigurasi kita adalah tempat yang sempurna
‫untuk menyimpan data rahasia semacam ini, jadi seperti kata sandi
‫misalnya, dan mari kita tambahkan dan edit
‫di sini, oke, jadi sebut saja JWT, rahasia, dan tentu saja
‫nama yang kami berikan di sini, tidak terlalu penting tetapi yang
‫penting adalah rahasia yang kami
‫tentukan
‫di sini, baiklah, karena menggunakan enkripsi standar HSA 256
‫untuk tanda tangan, rahasianya setidaknya harus tiga puluh dua karakter, baiklah, tetapi semakin
‫lama semakin baik sebenarnya dan di sinilah banyak tutorial
‫di luar sana gagal, beberapa dari mereka
‫hanya meletakkan string yang sangat
‫pendek di sini, tapi itu tidak
‫ideal lagi, jadi untuk enkripsi tanda tangan terbaik,
‫sekali lagi Anda setidaknya
‫harus menggunakan tiga puluh dua karakter,
‫jadi saya akan membuat rahasia saya di sini sekarang tapi
‫kamu harus benar-benar menggunakan
‫yang lain, oke, tolong jangan gunakan sa saya
‫satu seperti yang saya lakukan karena itu
‫bisa menjadi masalah keamanan untuk
‫aplikasi Anda, oke,
‫selalu gunakan rahasia unik untuk aplikasi Anda dan
‫tidak pernah sama, baiklah, dan
‫terutama bukan yang dari orang lain jadi
‫jelas bukan yang saya sedang mengetik sekarang.
‫Jadi ini bisa
‫apa saja, tidak harus karakter atau hal
‫aneh, saya lebih suka menggunakan frasa
‫seperti ini, rahasia saya yang
‫sangat aman dan sangat panjang, jadi apa yang terjadi
‫di sini, bagaimanapun, ini
‫harus tiga puluh dua karakter dan seterusnya ini
‫yang
‫akan kita gunakan untuk token web Jason,
‫tapi sekali lagi tolong gunakan yang lain, oke.
‫Bagaimanapun, mari kembali ke pengontrol otentikasi di sini, dan
‫sekarang benar-benar menggunakannya.
‫Jadi ingat variabel lingkungan
‫adalah proses dot end dot rahasia JWT,
‫oke.
‫Jadi pada titik ini, kami memiliki muatan
‫dan kami memiliki rahasianya.
‫Header token sebenarnya akan dibuat secara otomatis tetapi sekarang
‫yang juga
‫dapat kita lakukan adalah meneruskan
‫beberapa opsi, dan opsi yang
‫akan saya berikan adalah kapan JWT harus kedaluwarsa.
‫Jadi ini berarti bahwa setelah
‫waktu yang akan kita
‫lewati di sini, token
‫web
‫Jason tidak lagi valid, bahkan jika itu
‫akan diverifikasi dengan
‫benar, baiklah, jadi ini pada dasarnya
‫untuk logout pengguna setelah jangka
‫waktu tertentu hanya sebagai tindakan pengamanan, oke.
‫Jadi mari kita definisikan waktu kedaluwarsa itu juga sebagai
‫variabel konfigurasi di sini,
‫jadi JWT kedaluwarsa dan di sini tentu saja, Anda dapat menggunakan
‫waktu yang sama seperti yang
‫saya berikan.
‫Jadi kita dapat menggunakan
‫string khusus seperti misalnya 90D dan algoritma
‫penandatanganan akan secara otomatis mengetahui bahwa ini
‫berarti sembilan puluh hari, oke, Anda juga dapat menggunakan
‫seperti sepuluh jam atau lima menit atau tiga detik atau sesuatu seperti ini,
‫atau sembarang angka , yang kemudian
‫akan diperlakukan
‫sebagai milidetik tetapi saya pikir yang terbaik
‫adalah menggunakan sembilan puluh atau sesuatu
‫D, jadi dalam kasus ini, sembilan puluh hari, baiklah,
‫dan sekali lagi, setelah
‫sembilan puluh hari, JWT tidak akan lagi
‫valid, bahkan jika tanda tangan itu benar dan semuanya sah.
‫Oke, jadi sekali lagi seperti tindakan keamanan tambahan, oke,
‫jadi
‫opsi ini seperti biasa, kami meneruskannya sebagai objek
‫dan kemudian mari kita tentukan kedaluwarsa
‫di, jadi kedaluwarsa dan kemudian proses titik akhir dan kemudian JWT
‫kedaluwarsa, oke, dan ini di sini kemudian akan menambahkan beberapa data
‫tambahan ke payload, tapi itu
‫tentu saja
‫tidak masalah sama sekali.
‫Jadi kita baru saja membuat token,
‫sekarang yang perlu
‫kita lakukan adalah mengirimkannya ke klien.
‫Jadi mari kita taruh di sini sebelum pengguna
‫benar-benar dan kemudian itu sebenarnya.
‫Hanya itu yang perlu kita lakukan untuk memasukkan
‫pengguna baru, karena saat
‫ini kami tidak
‫memeriksa apakah ada kata sandi yang benar atau apakah
‫pengguna benar-benar ada di
‫database karena di sini dalam
‫kasus
‫ini, pengguna benar-benar baru saja
‫dibuat, dan jadi langsung saja kita
‫login pengguna ke dalam aplikasi
‫dengan mengirimkan token, oke, dan penggunaan klien kemudian
‫dalam beberapa hal menyimpan token itu, seperti
‫yang kita bicarakan
‫sebelumnya di kuliah sebelumnya, oke, jadi mari kita simpan di sini, dan mari
‫kita coba, oke, jadi mari kita alamat lama
‫saya di sini, hello@jonas. io, mari kita kirim,
‫dan mari kita tunggu dan memang,
‫ini adalah token web Jason kami, jadi selamat, Anda baru saja
‫membuat token web Jason pertama Anda
‫yang akan terlihat sedikit seperti ini, dan
‫tentu saja tidak akan terlihat persis seperti
‫aslinya. sama, karena rahasia kita juga tidak
‫sama, kan, dan sekarang yang ingin saya tunjukkan kepada
‫Anda, adalah debugger
‫JWT, yang saya tunjukkan kepada Anda
‫sebagai tangkapan layar sebelumnya di
‫video terakhir.
‫Jadi mari kita menyalin token
‫ini dan kemudian pergi ke JWT. io, oke, lalu di sini
‫kita
‫memiliki debugger dan jadi mari
‫kita hapus yang ini di sini, dan letakkan milik
‫kita dan segera Anda melihat bahwa
‫tanda tangan kita tidak valid, tapi
‫itu karena fungsi tanda mengedit dua properti
‫ini di sini,
‫karena kita menentukan kedaluwarsa tanggal pada dasarnya.
‫Jadi ini di sini dikeluarkan pada,
‫dan ini adalah waktu kedaluwarsa, oke,
‫jadi jika kita menghapus keduanya dari sini, Anda akan
‫melihat
‫bahwa sekarang, tanda tangan ini
‫benar-benar diverifikasi, oke jadi yang penting untuk diperhatikan di
‫sini, tentu saja tajuknya terlihat oke
‫itu pada dasarnya mudah didekodekan, dan jadi
‫Anda bahwa kami tidak menentukan semua ini,
‫itu adalah paket token web Jason yang melakukannya untuk
‫kami, tetapi di sini sebenarnya adalah muatan yang kami tentukan,
‫jadi jika kita lihat di
‫ID ini, harus sama persis dengan yang kita
‫miliki di tukang pos, jadi berakhir
‫di enam OF, dan memang benar sama persis, oke,
‫jadi dua ini di sini terbuka
‫dan kemudian tanda tangan tentu saja, kita tidak bisa
‫benar-benar mengerti, karena tentu saja rahasia kami
‫hanya itu, ini benar-benar rahasia, baiklah, jadi ini
‫hanya untuk menunjukkan kepada Anda bahwa semuanya berfungsi,
‫dan mari kita tutup
‫ini, dan ya, kami tidak dapat memasukkan pengguna, tapi hanya jika
‫pengguna baru saja mendaftar, karena dalam
‫hal ini, kami tidak perlu memverifikasi email
‫di database, dan
‫juga tidak kata sandi, oke.
‫Jadi melakukan semua itu adalah proses yang jauh lebih
‫kompleks, dan itulah yang sebenarnya
‫akan kita lakukan di
‫kuliah berikutnya, jadi selanjutnya, kita benar-benar akan memasukkan
‫pengguna, berdasarkan alamat email dan kata sandi mereka.