Kemudian, Anda akan menambahkan dukungan untuk autentikasi 2 langkah melalui kunci keamanan, berdasarkan WebAuthn. Untuk melakukannya, Anda harus mengimplementasikan hal berikut: Show
Lihat aplikasi web yang telah selesai dan cobalah. 2. Tentang WebAuthnDasar-dasar WebAuthnMengapa WebAuthn?Phishing adalah masalah keamanan yang sangat serius di web: sebagian besar pelanggaran akun memanfaatkan sandi yang lemah atau dicuri yang digunakan kembali di berbagai situs. Respons kolektif industri terhadap masalah ini merupakan autentikasi multi-faktor, namun implementasinya terpecah-pecah dan banyak yang masih belum dapat menangani phishing secara memadai. Web Authentication API, atau WebAuthn, adalah protokol tahan phishing standar yang dapat digunakan oleh aplikasi web apa pun. Cara kerjaSumber: webauthn.guide WebAuthn memungkinkan server mendaftarkan dan mengautentikasi pengguna menggunakan kriptografi kunci publik, bukan sandi. Situs dapat membuat kredensial yang terdiri dari pasangan kunci pribadi-publik.
Kunci publik digunakan oleh server untuk membuktikan identitas pengguna. Hal ini tidak bersifat rahasia, karena tidak berguna tanpa kunci pribadi yang sesuai. ManfaatWebAuthn memiliki dua manfaat utama:
Kasus penggunaanSalah satu kasus penggunaan untuk WebAuthn adalah autentikasi 2 langkah dengan kunci keamanan. Hal ini mungkin sangat relevan untuk aplikasi web perusahaan. Dukungan browserWebAuthn didukung di Chrome, Firefox, dan Edge, serta Safari. WebAuthn ditulis oleh W3C dan FIDO, dengan partisipasi Google, Mozilla, Microsoft, Yubico, dan lainnya. Glosarium
Dalam workshop ini, kita akan menggunakan pengautentikasi roaming. 3. Sebelum memulaiYang Anda perlukanUntuk menyelesaikan codelab ini, Anda memerlukan:
Anda dapat menggunakan salah satu dari berikut ini sebagai kunci keamanan:
Sumber: https://www.yubico.com/products/security-key/ Tidak ada kunci keamanan? Bukan masalah. Jika tidak memiliki kunci keamanan, Anda dapat menggunakan Chrome DevTools untuk mengemulasi kunci keamanan. Lihat caranya di Mengemulasi pengautentikasi dan men-debug WebAuthn. Yang akan Anda pelajariAnda akan mempelajari ✅
Anda tidak akan mempelajari ❌
Pernyataan penyangkalanPengguna harus memasukkan sandi untuk login. Namun, untuk memudahkan codelab ini, sandi tidak disimpan atau diperiksa. Dalam aplikasi yang sebenarnya, Anda akan memeriksa apakah sisi server tersebut benar atau tidak. Pemeriksaan keamanan dasar seperti pemeriksaan CSRF, validasi sesi, dan pembersihan input diimplementasikan dalam codelab ini. Namun, ada banyak langkah keamanan yang tidak diperlukan. Misalnya, tidak ada batasan input sandi untuk mencegah serangan brute force. Tidak masalah di sini karena sandi tidak disimpan, namun pastikan Anda tidak menggunakan kode ini apa adanya dalam produksi. Perhatian: Kode yang ditampilkan dalam codelab ini adalah untuk tujuan pembelajaran. Jangan menggunakannya dalam produksi. 4. Menyiapkan pengautentikasi AndaJika Anda menggunakan ponsel Android sebagai pengautentikasi
Perhatian: Windows mengimplementasikan banyak WebAuthn secara native, sehingga akan terlihat berbeda di Windows. Di macOS, Anda akan melihat UI mirip Chrome yang serupa dengan screenshot di atas.
Jika Anda menggunakan kunci keamanan USB sebagai pengautentikasi
5. Memulai persiapanDalam codelab ini, Anda akan menggunakan Glitch, editor kode online yang secara otomatis dan instan men-deploy kode Anda. Membuat fork kode awalBuka project awal. Klik tombol Remix. Tindakan ini akan membuat salinan kode awal. Kini, Anda memiliki kode sendiri untuk diedit. Fork (disebut "remix" di Glitch) adalah tempat Anda akan melakukan semua pekerjaan untuk codelab ini. Mempelajari kode awalPelajari kode awal yang baru saja Anda buat fork-nya. Perhatikan bahwa di bagian 5, library bernama 6 sudah disediakan. Ini adalah library kustom yang menangani logika autentikasi sisi server. Library ini menggunakan library 7 sebagai dependensi.6. Mengimplementasikan pendaftaran kredensialKapan saja dalam codelab ini, Anda dapat melihat kode akhir (dan aplikasi web) sebagai referensi. Mengimplementasikan pendaftaran kredensialHal pertama yang kita perlukan untuk menyiapkan autentikasi 2 langkah dengan kunci keamanan adalah memungkinkan pengguna membuat kredensial. Mari kita tambahkan fungsi tersebut terlebih dahulu dalam kode sisi klien. Dalam codelab ini, semua kode sisi klien terkait autentikasi akan berada di 8.Di 8, perhatikan bahwa terdapat fungsi bernama 0 yang belum melakukan apa pun. Tambahkan kode berikut ke dalamnya:
Perhatikan bahwa fungsi ini sudah diekspor untuk Anda. Berikut adalah hal yang dilakukan 1:
Nanti dalam tutorial ini, Anda akan mengedit 0 untuk memastikan kode Anda berjalan di semua browser dan memanfaatkan fitur WebAuthn yang menarik. Untuk saat ini, mari kita fokus pada fungsi dasar.Tambahan lain: lihat kode serverBaca ini jika Anda ingin memahami berbagai konfigurasi autentikasi yang ditawarkan WebAuthn, dan cara penggunaannya di backend. Jika ini adalah pertama kalinya Anda menggunakan WebAuthn dan ingin memahami API, Anda juga dapat melewatinya untuk saat ini dan kembali lagi nanti. 0 melakukan dua panggilan ke server, jadi mari kita luangkan waktu sejenak untuk melihat apa yang terjadi di backend.Opsi pembuatan kredensialSaat klien membuat permintaan ke ( 2), server akan membuat objek opsi dan mengirimkannya kembali ke klien.Objek ini kemudian digunakan oleh klien dalam panggilan pembuatan kredensial yang sebenarnya:
Jadi, apa yang ada dalam 0 ini yang pada akhirnya digunakan dalam 1 sisi klien yang telah Anda terapkan pada langkah sebelumnya?Lihat kode server di bagian router.post("/credential-options", .... Mari kita tidak melihat setiap properti, tetapi berikut adalah beberapa properti menarik yang dapat Anda lihat di objek opsi kode server, yang dihasilkan menggunakan library 2 dan pada akhirnya dikembalikan ke klien:
Semua opsi ini adalah keputusan yang harus dibuat oleh aplikasi web untuk model keamanannya. Amati bahwa pada server, opsi ini ditentukan dalam satu objek 9.Verifikasi login Bagian lainnya yang lebih menarik di sini adalah 0.Karena WebAuthn adalah protokol kriptografi, WebAuthn bergantung pada verifikasi login acak untuk menghindari serangan replay—saat penyerang mencuri payload untuk melakukan replay autentikasi, padahal ia bukan pemilik kunci pribadi yang akan mengaktifkan autentikasi. Untuk mengurangi hal ini, verifikasi login dibuat di server, dan akan ditandatangani dengan cepat; tanda tangan kemudian akan dibandingkan dengan yang diharapkan. Tindakan ini memverifikasi bahwa pengguna menyimpan kunci pribadi pada saat pembuatan kredensial. Kode pendaftaran kredensialLihat kode server di bagian router.post("/credential", .... Di sinilah kredensial didaftarkan sisi server. Jadi, apa yang terjadi? Salah satu bit yang paling penting dalam kode ini adalah panggilan terverifikasi, melalui 1:
Menambahkan fungsi ini ke UISetelah fungsi Anda membuat kredensial, ``registerCredential() 2sudah siap, mari kita sediakan kredensial tersebut untuk pengguna.Anda akan melakukannya dari halaman Akun, karena ini adalah lokasi standar untuk pengelolaan autentikasi. Pada markup 3, di bawah nama pengguna, ada 4 yang masih kosong dengan class tata letak 5. Kita akan menggunakan 4 ini untuk elemen UI yang terkait dengan fungsi 2FA.Tambahkan ke div ini:
Di bawah div ini, tambahkan div kredensial yang akan kita perlukan nanti:
Di skrip inline 3, impor fungsi yang baru saja Anda buat dan tambahkan fungsi 8 yang memanggilnya, serta pengendali peristiwa yang dipasangkan ke tombol yang baru saja Anda buat.
Tampilkan kredensial yang dapat dilihat penggunaSetelah Anda menambahkan fungsi untuk membuat kredensial, pengguna memerlukan cara untuk melihat kredensial yang telah mereka tambahkan. Halaman Akun adalah tempat yang tepat untuk hal ini. Di 3, cari fungsi bernama 0.Tambahkan kode berikut yang membuat panggilan backend untuk mengambil semua kredensial terdaftar untuk pengguna yang saat ini login, dan yang menampilkan kredensial yang ditampilkan:
Untuk saat ini, jangan pikirkan tentang 1 dan 2; Anda akan mempelajarinya nanti dalam codelab ini.Tambahkan satu panggilan ke 3 di awal skrip inline, dalam 3. Dengan panggilan ini, kredensial yang tersedia diambil saat pengguna membuka halaman akunnya.
Sekarang, panggil 3 setelah 1 berhasil diselesaikan, sehingga daftar menampilkan kredensial yang baru dibuat:
Cobalah! 👩🏻💻Anda sudah menyelesaikan pendaftaran kredensial. Pengguna kini dapat membuat kredensial berbasis kunci keamanan, dan memvisualisasikannya di halaman Akun. Coba:
Menghapus kredensial Anda akan melihat bahwa kita telah mengimplementasikan fungsi untuk menghapus kredensial, dan menambahkannya ke kode awal. Dapat menghapus kredensial berguna untuk eksperimen cepat, misalnya dalam codelab ini; inilah alasan kami menambahkannya untuk Anda. Anda juga ingin mendukung penghapusan kredensial dalam aplikasi yang sebenarnya; pengguna akan membutuhkannya jika mereka kehilangan salah satu kunci keamanan atau tidak ingin menggunakan kunci tertentu lagi. 7. Mengaktifkan autentikasi faktor keduaKapan saja dalam codelab ini, Anda dapat melihat kode akhir (dan aplikasi web) sebagai referensi. Pengguna dapat mendaftarkan dan membatalkan pendaftaran kredensial, tetapi kredensial hanya ditampilkan dan belum digunakan. Sekarang saatnya menggunakannya, dan siapkan autentikasi 2 langkah yang sebenarnya. Di bagian ini, Anda akan mengubah alur autentikasi di aplikasi web Anda dari alur dasar ini: Untuk alur dua langkah ini: Mengimplementasikan autentikasi faktor keduaPertama, mari kita tambahkan fungsi yang diperlukan dan implementasikan komunikasi dengan backend; kita akan menambahkannya di frontend pada langkah berikutnya. Hal yang perlu Anda terapkan di sini adalah fungsi yang mengautentikasi pengguna dengan kredensial. Di 8, cari fungsi kosong 9, lalu tambahkan kode berikut:
Perhatikan bahwa fungsi ini sudah diekspor untuk Anda; kita akan membutuhkannya di langkah berikutnya. Berikut adalah hal yang dilakukan 9:
Tambahan lain: lihat kode serverPerhatikan bahwa 3 telah menangani beberapa navigasi dan akses: hal ini memastikan bahwa halaman Akun hanya dapat diakses oleh pengguna yang diautentikasi, dan melakukan beberapa pengalihan yang diperlukan.Sekarang, lihat kode server di bagian 4.Ada dua hal menarik yang perlu diperhatikan di sini:
Sertakan halaman autentikasi faktor kedua di alur penggunaanDi folder 8, perhatikan halaman baru 9.Tombol ini bertuliskan Gunakan kunci keamanan, tetapi untuk saat ini tombol tersebut tidak melakukan apa pun. Buat tombol ini memanggil 0 saat diklik.
Menggunakan autentikasi faktor keduaSekarang Anda sudah siap untuk menambahkan langkah autentikasi faktor kedua. Yang perlu Anda lakukan sekarang adalah menambahkan langkah ini dari 2, untuk pengguna yang telah mengonfigurasi autentikasi 2 langkah.Pada 2, di bagian 4, tambahkan kode yang secara bersyarat menavigasi pengguna ke halaman autentikasi faktor kedua jika mereka telah menyiapkan 2FA.Dalam codelab ini, membuat kredensial secara otomatis mengikutsertakan pengguna ke autentikasi 2 langkah. Perhatikan bahwa 3 juga mengimplementasikan pemeriksaan sesi sisi server, yang memastikan bahwa hanya pengguna terautentikasi yang dapat mengakses 3. 0Cobalah! 👩🏻💻
8. Memudahkan penggunaan kredensialKapan saja dalam codelab ini, Anda dapat melihat kode akhir (dan aplikasi web) sebagai referensi. Anda telah mempelajari fungsi dasar autentikasi 2 langkah dengan kunci keamanan 🚀 Tapi... Apakah Anda memperhatikan? Untuk saat ini, daftar kredensial kita tidak praktis: ID kredensial dan kunci publik adalah string panjang yang tidak membantu saat mengelola kredensial. Manusia tidak terlalu baik dalam hal string dan angka yang panjang 🤖 Jadi, mari kita tingkatkan, dan tambahkan fungsi untuk memberi nama dan mengganti nama kredensial dengan string yang dapat dibaca manusia. Sebaiknya Anda tahu Nama kredensial bukan bagian dari spesifikasi. Secara default, kredensial hanya memiliki ID. Menambahkan nama adalah hal yang kita lakukan di sini hanya untuk memudahkan pengguna. Selain itu, beberapa tugas sudah diselesaikan: kita telah menyesuaikan library sisi server dan menambahkan kolom 8 untuk kredensial yang Anda simpan di database. Periksa 9 untuk melihat kode.Melihat renameCredentialFungsi untuk mengganti nama kredensial telah ditambahkan untuk Anda dalam kode awal, di 00, guna menghemat waktu saat menerapkan fungsi ini yang tidak terlalu berpengaruh. 1Ini adalah panggilan update database rutin: klien mengirimkan permintaan 01 ke backend, dengan ID kredensial dan nama baru untuk kredensial tersebut.Mengimplementasikan nama kredensial kustomDi 3, perhatikan fungsi kosong 03.Tambahkan kode berikut: 2Mungkin lebih masuk akal untuk memberi nama kredensial hanya setelah kredensial berhasil dibuat. Jadi, mari kita buat kredensial tanpa nama, dan setelah berhasil dibuat, ganti nama kredensial tersebut. Namun, hal ini akan menghasilkan dua panggilan backend. Gunakan fungsi 03 di 05, agar pengguna dapat menamai kredensial saat pendaftaran: 3Perhatikan bahwa input pengguna akan divalidasi dan dibersihkan dalam backend: 4Menampilkan nama kredensial Buka 06 di 07.Perlu diperhatikan bahwa sudah ada kode untuk menampilkan nama kredensial di bagian atas kartu kredensial: 5Cobalah! 👩🏻💻
Mengaktifkan penggantian nama kredensialPengguna mungkin perlu mengganti nama kredensial–misalnya, mereka menambahkan kunci kedua dan ingin mengganti nama kunci pertama mereka untuk dapat membedakannya dengan lebih baik. Di 3, cari fungsi 2 yang masih kosong dan tambahkan kode berikut ke dalamnya: 6Sekarang, di 06 07, dalam div 12, tambahkan kode berikut. Kode ini menambahkan tombol Ganti nama ke template kartu kredensial; saat diklik, tombol tersebut akan memanggil fungsi 2 yang baru saja kita buat: 7Cobalah! 👩🏻💻
Menampilkan tanggal pembuatan kredensialTanggal pembuatan tidak ada di kredensial yang dibuat melalui 14.Namun, karena informasi ini dapat berguna bagi pengguna untuk membedakan kredensial, kami telah menyesuaikan library sisi server dalam kode awal untuk Anda, dan menambahkan kolom 15 yang sama dengan 16 setelah menyimpan kredensial baru.Pada 07 di 18 4, tambahkan hal berikut untuk menampilkan informasi tanggal pembuatan kepada pengguna: 89. Membuat kode Anda sesuai untuk masa mendatangSejauh ini, kita hanya meminta pengguna mendaftarkan pengautentikasi roaming sederhana yang kemudian digunakan sebagai faktor kedua selama login. Satu pendekatan yang lebih canggih adalah mengandalkan jenis pengautentikasi yang lebih kuat: pengautentikasi roaming pemverifikasi pengguna (UVRA). UVRA dapat memberikan dua faktor autentikasi dan ketahanan terhadap phishing dalam alur login satu langkah. Seperti apa tampilan UVRA? UVRA (pengautentikasi roaming pemverifikasi pengguna) dapat berupa:
Idealnya, Anda mendukung kedua pendekatan tersebut. Untuk melakukannya, Anda harus menyesuaikan pengalaman pengguna:
Pelajari hal ini lebih lanjut di Melakukan Bootstrap Akun Tahan Phishing dengan Login Tanpa Sandi Opsional. Dalam codelab ini, kita tidak akan menyesuaikan pengalaman pengguna, tetapi kita akan menyiapkan codebase agar Anda memiliki data yang diperlukan untuk menyesuaikan pengalaman pengguna. Anda memerlukan dua hal:
Untuk mengetahui apakah kredensial yang dapat ditemukan dibuat atau tidak:
Tentang 26 26 disebut ekstensi: ini adalah cara untuk melengkapi mekanisme dalam membuat kredensial, agar sesuai dengan kasus penggunaan tertentu. Pelajari lebih lanjut di ekstensi WebAuthn.Mari kita dapatkan nilai 26 dan 28, lalu kirimkan ke backend. Di 00, ubah 1 sebagai berikut:
1 akan terlihat seperti berikut: 910. Memastikan dukungan lintas browserMendukung browser non-ChromiumDalam fungsi 1 8, kita memanggil 45 pada kredensial yang baru dibuat untuk menyimpan informasi ini di backend sebagai petunjuk ke server.Namun, 46 saat ini tidak diimplementasikan di semua browser (tidak seperti 47 yang didukung di seluruh browser): panggilan 46 akan menampilkan error di Firefox dan Safari, yang akan mencegah pembuatan kredensial di browser ini.Untuk memastikan kode Anda berjalan di semua browser utama, gabungkan panggilan 40 dalam kondisi: 0Perlu diketahui bahwa pada server, 28 ditetapkan ke 51. Di Firefox dan Safari, daftar 28 tidak akan menjadi 53, tetapi daftar kosong 54, yang mencegah error.Berikan peringatan kepada pengguna yang menggunakan browser yang tidak mendukung WebAuthnMeskipun WebAuthn didukung di semua browser utama, sebaiknya tampilkan peringatan di browser yang tidak mendukung WebAuthn. Di 2, amati kehadiran div ini: 1Di skrip inline 2, tambahkan kode berikut untuk menampilkan banner di browser yang tidak mendukung WebAuthn: 2Dalam aplikasi web yang sebenarnya, Anda akan melakukan hal yang lebih rumit dan memiliki mekanisme penggantian yang sesuai untuk browser tersebut—tetapi hal ini menunjukkan cara memeriksa dukungan WebAuthn. 11. Kerja bagus!✨Selesai! Anda telah mengimplementasikan autentikasi 2 langkah dengan kunci keamanan. Dalam codelab ini, kita telah membahas dasar-dasarnya. Jika Anda ingin menjelajahi WebAuthn untuk 2FA lebih lanjut, berikut beberapa ide yang dapat Anda coba selanjutnya: Bagaimana cara membuka kunci keamanan facebook?Pelajari selengkapnya tentang kunci keamanan dan cara kerjanya.. Buka Pengaturan keamanan dan login.. Ketuk Gunakan autentikasi dua faktor. Anda mungkin diminta memasukkan lagi kata sandi Facebook Anda pada tahap ini.. Ketuk Gunakan kunci keamanan. Lalu, ikuti petunjuk di layar.. Dimana letak kunci keamanan?Di ponsel Android, buka myaccount.google.com/security. Pada "Login ke Google", pilih Verifikasi 2 Langkah. Anda mungkin perlu login. Di kiri bawah, ketuk Tambahkan kunci keamanan.
Gimana cara mendapatkan kode keamanan Google?Memverifikasi Akun Google. Di ponsel, cari Setelan Google Anda. Bergantung pada perangkat Anda: ... . Ketuk Kelola Akun Google Anda.. Scroll ke kanan dan ketuk Keamanan. Kode keamanan. ... . Kode 10 digit akan tersedia.. Masukkan kode di ponsel yang ingin digunakan untuk login, lalu ketuk Lanjutkan.. Apa itu tombol di kunci keamanan?Kunci keamanan merupakan sebuah metode autentikasi dua faktor yang menambahkan lapisan keamanan untuk login, biasanya digunakan dengan dua metode autentikasi dua faktor lainnya seperti kode pesan teks (SMS) atau aplikasi autentikasi pihak ketiga.
|