Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Web Development

Autentikasi Dua Faktor Dengan Duo-Security 

by
Read Time:9 minsLanguages:

Indonesian (Bahasa Indonesia) translation by Nurul Fatimah (you can also view the original English article)

Dalam artikel terakhir saya tentang dua faktor otentikasi, saya membuat screencast yang diuraikan bagaimana menggunakan sistem otentikasi dua-faktor Authy untuk dengan mudah meningkatkan keamanan login website Anda. Saat ini, kita akan melihat layanan lain oleh Duo Security yang menawarkan API padat keamanan, panduan, dan pra-dibangun perpustakaan yang membuat sangat mudah untuk bangun dan berjalan cepat.

Sama seperti Authy, Anda akan memerlukan server aplikasi untuk menerapkan Duo karena beberapa aspeknya, khususnya kunci rahasia, perlu ditentukan di tempat yang tidak dapat diakses. Untuk tutorial ini, saya menggunakan perpustakaan ColdFusion Duo, tetapi mereka juga menawarkan lib untuk:

  • Python
  • Ruby
  • Classic ASP
  • ASP.Net
  • Java
  • PHP
  • Node.js
  • Perl

Dari perspektif sisi server, mereka pasti mendapat liputan yang bagus.


Menyiapkan Aplikasi Anda di Duo 

Hal pertama yang harus Anda lakukan adalah mendaftar untuk sebuah akun. Saya tidak akan memandu Anda melalui langkah-langkah itu karena seharusnya sudah cukup jelas, tetapi saya akan mengatakan itu keren untuk melihat opsi gratis yang tersedia sehingga saya bisa membuat tutorial ini tanpa biaya. Ya, Duo mengenakan biaya untuk layanan mereka dan sejujurnya itu hal yang baik. Anda ingin memastikan layanan yang membantu Anda mengamankan situs Anda memiliki dana untuk menjaga diri dalam bisnis untuk sedikit.

Setelah mendaftar, Anda akan diminta untuk menyiapkan integrasi baru. Ini hanya berarti bahwa Anda perlu mengatur secara spesifik apa yang ingin Anda amankan. Dan Anda akan melihat mengapa saya mengatakan, "apa yang ingin Anda amankan" ketika Anda mengklik dropdown Integration type. Duo memungkinkan Anda mengatur berbagai opsi keamanan, bukan hanya situs web.

integration-types

Untuk tujuan kita, kita akan menggunakan Web SDK"pilihan. Integration name adalah nama semantik apapun yang Anda ingin gunakan untuk menandai situs Anda dengan.

new-integrationnew-integrationnew-integration

Setelah menyimpan informasi tersebut, Anda disajikan dengan halaman pengaturan untuk integrasi Anda. Di sinilah Anda akan menyesuaikan bagaimana otentikasi seharusnya berfungsi dan mendapatkan akses ke integrasi Anda, kunci rahasia, dan nama host API. Ini sangat penting untuk berhasil bekerja dengan Duo dan tidak boleh dibagikan.

secret-keyssecret-keyssecret-keys

Selain itu, Anda harus membuat kunci aplikasi alfanumerik 40 karakter Anda sendiri yang tidak akan diketahui Duo dan memastikan kontrol yang lebih besar atas akun dan aplikasi Anda. Misalnya, saya membuat kunci acak berikut untuk aplikasi demo saya:

Perhatikan bahwa panjangnya harus 40 karakter. Jika tidak, Anda akan menerima kesalahan saat Anda mencoba menggunakannya.

Ketika Anda melihat melalui pengaturan, sebagian besar sudah cukup jelas tetapi ada bagian yang disebut Policy yang memungkinkan Anda untuk menentukan kapan pengguna akan diminta untuk otentikasi dua faktor. Penting untuk memilih opsi terbaik untuk aplikasi Anda. Dari pengalaman saya, sebagian besar situs cenderung bertanya kepada pengguna mereka apakah mereka ingin ikut serta dalam keamanan yang ditingkatkan. Autentikasi dua faktor dapat menjadi rumit dan beberapa pengguna tidak ingin menggunakannya. Untuk skenario ini, saya akan mengikuti Require Enrollment yang Diperlukan (yang akan memastikan proses pendaftaran Duo tidak dilewati) dan menyetel bendera di catatan basis data pengguna saat mereka ikut serta. Ini memungkinkan pengguna untuk masuk menggunakan skema otentikasi normal Anda tanpa dipaksa untuk mengotentikasi melalui Duo.

Pada kenyataannya, itu benar-benar semua yang saya butuhkan untuk setup di panel admin Duo untuk membuat layanan tersedia untuk aplikasi saya. Jadi mari kita mulai menambahkan beberapa kode.


Menambahkan Duo ke Aplikasi Saya

Saya ingin menegaskan kembali bahwa Anda perlu membuat kode sisi server untuk benar-benar membuat karya ini dan Duo telah menyediakan berbagai macam lib untuk Anda gunakan.

Kode yang saya tulis adalah CFML dan saya akan menggunakan komponen ColdFusion mereka yang mengelola semua kerumitan penandatanganan dan mengenkripsi permintaan saya serta memverifikasi kembali nilai dari Duo API.

Seperti yang saya sebutkan sebelumnya, sebagian besar aktivasi dua faktor adalah keikutsertaan yang berarti bahwa pengguna akan masuk ke pengaturan akun mereka, mengklik tautan untuk mengaktifkan layanan dan melalui proses pengisian informasi yang relevan untuk membuat semuanya berjalan. Ini umumnya melibatkan penyediaan layanan nomor ponsel dan memvalidasi pengaturan berdasarkan nomor unik yang dikirim baik melalui pesan teks atau panggilan telepon. Duo dapat menawarkan opsi apa pun kepada pengguna dan juga menyediakan aplikasi seluler mereka sendiri yang dapat menghasilkan kode sandi untuk pengguna melalui ponsel mereka.

Jika Anda melihat tangkapan layar di bawah, Anda dapat melihat bagaimana saya mencoba mereplikasi layar akun sederhana dengan tombol yang menonjol di bawahnya, sebagai ajakan bertindak untuk mengaktifkan otentikasi:

turn-onturn-onturn-on

Ketika pengguna mengkliknya, panggilan dibuat ke komponen Duo untuk menandatangani permintaan melalui metode signRequest().

Untuk memahami apa metode ini, saya ingin menggunakan kutipan dari situs Duo:

sign_request() melakukan HMAC-SHA1 dari nama pengguna, kunci integrasi, dan cap waktu kedaluwarsa, menggunakan kunci rahasia integrasi sebagai kunci HMAC. Dengan menghasilkan sisi server dan setelah otentikasi utama, Duo yakin bahwa pengguna memang berwenang untuk melanjutkan ke tahap kedua otentikasi.

Pada dasarnya, ini membuat permintaan terenkripsi berdasarkan pada semua kunci untuk integrasi Anda, kunci aplikasi 40-char unik yang Anda buat, dan nama pengguna unik pengguna. Hasil akhirnya terlihat seperti ini:

Tanda tangan akan disimpan dalam variabel session.sigReq yang merupakan variabel berbasis sesi persisten yang bisa saya referensi nanti. Saya memeriksa nilainya untuk memastikan bahwa tanda tangan yang sah diberikan kembali dan jika demikian, saya dapat melanjutkan ke halaman berikutnya dalam proses.


Duo IFRAME

Signature dilewatkan ke Duo IFRAME yang mengelola kedua penambahan pengguna baru ke layanan, serta validasi pengguna yang ada. Duo menawarkan sebuah perpustakaan JavaScript yang berinteraksi dengan IFRAME memberikan UI untuk setup pengguna. Melihat kode di bawah, kita dapat melihat IFRAME, referensi untuk Duo JS lib, dan metode panggilan untuk menginisialisasi semuanya:

Panggilan metode sederhana, mengambil tiga pilihan:

  • Hostname API yang didefinisikan untuk integrasi Anda.
  • Permintaan tanda tangan yang dihasilkan kita.
  • URL bahwa Duo akan posting hasil untuk sekali itu telah melakukan melakukan pemrosesannya.

Jika Anda bingung dengan ini, <cfoutput>#session.sigReq#</cfoutput>, jangan. Ini hanya cara ColdFusion untuk mengganti variabel dengan nilainya.

Pada titik ini, pengguna akan disajikan dengan Duo pengaturan layar:

first-time-mobile

Pengguna akan perlu untuk memasukkan nomor telepon dan kemudian memilih apakah mereka ingin menerima kode enam digit validasi melalui pesan suara atau SMS. Saya mencoba keduanya dan mereka bekerja sama baiknya. Duo melakukan verifikasi pada akhir mereka untuk memastikan kode yang dimasukkan valid.

Selanjutnya, pengguna akan disajikan dengan layar untuk men-download aplikasi mobile Duo:

install-duo-mobileinstall-duo-mobileinstall-duo-mobile

Ini sebenarnya hal yang baik karena memiliki aplikasi seluler akan memungkinkan pengguna untuk mendapatkan kode bahkan jika mereka tidak memiliki layanan seluler.

Setelah mereka berhasil terdaftar, mereka akan menerima halaman yang ditunjukkan di bawah ini dan meminta satu kali lagi untuk memvalidasi diri mereka:

first-time-mobile-successfirst-time-mobile-successfirst-time-mobile-success

Untuk semua maksud, semua proses ini adalah di tangan Duo; Anda hanya menunggu untuk feedback.

Umpan balik akan menentukan jika pengguna telah benar setup dan Anda akan perlu menggunakan metode verifyResponse() untuk itu.

Seperti sebelumnya, dibutuhkan semua variabel kunci dan dalam kasus ini, menerima respons dari Duo berupa variabel posted disebut sig_response. Saya telah dirujuk sebagai form.sig_response karena itulah bagaimana ColdFusion memungkinkan akses ke variabel posted.

Metode verifyResponse() yang akan mengambil respon ditandatangani dikirim kembali oleh Duo dan jika semua baik, akan kembali nama pengguna Anda untuk memvalidasi terhadap database Anda. Jadi dalam kasus saya, saya berharap bahwa "rogerwilcoroger@fakeemail.com" akan dikembalikan. Setelah saya memvalidasi itu, saya kemudian mengatur bendera di catatan basis data pengguna yang akan memberi tahu saya bahwa mereka telah memilih ke dalam otentikasi dua faktor.

Itu dia. Itu semua yang perlu Anda lakukan untuk mengatur pengguna untuk mengaktifkan otentikasi dua faktor. Sekarang mari beralih ke pengalaman masuk.


Login Dengan Duo

Anda mungkin mengharapkan sesuatu yang ajaib terjadi dari sini, tetapi yang cukup menarik, Anda hampir dapat menggunakan kembali kode persis yang sama yang dibuat untuk mengaktifkan pengguna agar mereka dapat masuk. Saya melanjutkan dan membuat laman masuk yang sangat mendasar:

login-pagelogin-pagelogin-page

Halaman itu sendiri hanya markup HTML. Bagian yang penting adalah menentukan terlebih dahulu apakah pengguna telah ikut serta dan itu terjadi ketika Anda memvalidasi informasi login situs normal mereka. Ya, Anda masih harus melakukan validasi masuk normal untuk nama pengguna dan kata sandi Anda. Layanan Duo melengkapi itu, bukan pengganti.

Dengan memeriksa catatan basis data, Anda harus dapat menentukan apakah mereka telah ikut serta. Jika mereka belum, maka Anda hanya akan mengotentikasi mereka menggunakan kombinasi nama pengguna/kata sandi normal Anda. Jika mereka punya, maka Anda akan memanggil metode signRequest(), yang sama yang kita gunakan saat mengaktifkan pengguna baru:

Sekali lagi, kita membuat tanda tangan terenkripsi untuk dikirim ke Duo API melalui IFRAME dan pustaka JavaScript-nya. Kuncinya adalah bahwa dalam skenario ini, kita hanya perlu menerapkan otentikasi dua faktor jika pengguna telah mendaftar untuk itu. Inilah mengapa pengaturan kebijakan yang tepat untuk integrasi Anda adalah penting. Dengan mengatur saya untuk Require Enrollment dan menggunakan bendera catatan basis data, saya masih dapat mengizinkan pengguna untuk mengakses situs saya bahkan jika mereka belum memilih untuk otentikasi dua faktor. Jika pengguna telah ikut serta, maka mereka akan diminta memasukkan kode Duo untuk memvalidasi akunnya.


Merampungkan

Meningkatkan keamanan situs seseorang selalu merupakan hal yang baik. Anda ingin memastikan Anda melindungi pengguna Anda sebanyak mungkin dan menggunakan autentikasi dua faktor adalah langkah besar dalam arah yang benar.

Duo menawarkan layanan yang solid dengan kemudahan dan fleksibilitas luar biasa. Meskipun saya hanya menunjukkan kepada Anda SDK Web mereka, mereka juga memiliki API yang jauh lebih fleksibel yang memberi Anda kontrol yang sangat terperinci atas sebagian besar aspek proses. Meskipun saya merekomendasikan menggunakan SDK Web, sangat bagus mengetahui Anda memiliki kekuatan yang dapat Anda gunakan. Hat berangkat ke Duo untuk membuat layanan hebat.

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.