Lompat ke konten utama
Change page

Autentikasi di Ethereum

Jika Anda berasal dari pengembangan web tradisional, Anda terbiasa dengan login nama pengguna/kata sandi, alur OAuth, dan kuki sesi. Autentikasi di Ethereum bekerja secara berbeda—dan dalam banyak hal, lebih sederhana.

Di Ethereum, pengguna membuktikan identitas mereka dengan menandatangani pesan dengan dompet mereka. Tidak ada kata sandi yang perlu disimpan. Tidak ada basis data kredensial yang bisa bocor. Hanya kriptografi.

Apa bedanya dengan Web2?

Web2Ethereum
Nama pengguna + kata sandiAlamat dompet + tanda tangan
Server menyimpan kredensialPengguna memegang kunci privat
Sesi dikelola oleh kuki / JWTSesi dimulai dengan tanda tangan dompet offchain
"Masuk dengan Google""Masuk dengan Ethereum"
Alur pengaturan ulang kata sandiPemulihan frasa benih

Perubahan mendasarnya: di Web2, server terpusat mengautentikasi Anda. Di Ethereum, Anda mengautentikasi diri sendiri dengan membuktikan bahwa Anda mengendalikan alamat tertentu—dan siapa pun dapat memverifikasinya secara independen.

Prasyarat

Pastikan Anda memahami:

Cara kerja autentikasi berbasis dompet

Alur intinya sederhana:

  1. Aplikasi terdesentralisasi (dapp) Anda meminta pengguna untuk menghubungkan dompet mereka (melalui MetaMask, Rainbow, WalletConnect, dll.)
  2. Dompet membagikan alamat Ethereum pengguna - ini adalah pengidentifikasi publik mereka
  3. Dapp Anda menghasilkan pesan unik (sebuah nonce atau tantangan)
  4. Pengguna menandatangani pesan dengan kunci privat mereka (terjadi di dalam dompet)
  5. Backend Anda memverifikasi tanda tangan terhadap alamat yang diklaim
  6. Jika valid, pengguna diautentikasi

Tidak ada kata sandi yang pernah diketik, disimpan, atau dikirimkan.

Masuk dengan Ethereum (EIP-4361)

EIP-4361 (terbuka di tab baru) mendefinisikan format pesan standar untuk masuk dengan Ethereum, yang umumnya disebut SIWE (Sign-In with Ethereum). Ini menggantikan penandatanganan pesan ad-hoc dengan standar yang terstruktur dan aman.

Pesan SIWE terlihat seperti ini:

Fitur utama SIWE:

  • Pengikatan domain - pesan menyertakan domain, mencegah phishing
  • ID Rantai - menentukan jaringan mana tanda tangan tersebut valid
  • Nonce - mencegah serangan pemutaran ulang (replay attacks)
  • Kedaluwarsa - stempel waktu opsional yang membatasi jendela validitas
  • Sumber daya - URI opsional untuk akses dengan cakupan tertentu

Pustaka SIWE

Contoh: masuk sisi klien dengan siwe

Contoh: verifikasi sisi server (Node.js)

Pustaka koneksi dompet

Sebelum mengautentikasi, Anda perlu pengguna untuk menghubungkan dompet mereka. Pustaka-pustaka ini membuatnya mudah:

Memverifikasi tanda tangan secara manual

Jika Anda lebih suka tidak menggunakan SIWE, Anda dapat memverifikasi tanda tangan secara langsung:

Catatan keamanan penting

  • Selalu gunakan nonce - mencegah serangan pemutaran ulang di mana tanda tangan lama digunakan kembali
  • Sertakan domain - mencegah tanda tangan menjadi valid di berbagai situs yang berbeda
  • Periksa kedaluwarsa - tanda tangan harus memiliki jendela validitas yang terbatas
  • Gunakan SIWE (EIP-4361) jika memungkinkan - ini menangani semua hal di atas untuk Anda
  • Jangan pernah mengekspos kunci privat - penandatanganan terjadi di dalam dompet; aplikasi Anda hanya melihat hasilnya

Manajemen sesi

Setelah diautentikasi, Anda masih memerlukan sesi—sama seperti Web2. Pola umum:

  • Token JWT - terbitkan JWT setelah memverifikasi tanda tangan, gunakan untuk permintaan API
  • Sesi sisi server - simpan alamat yang diverifikasi dalam kuki sesi
  • SIWE dengan sumber daya - tentukan token akses dengan cakupan yang ditautkan ke URI tertentu

Perbedaan utama dari Web2: alamat Ethereum pengguna adalah identitas persisten mereka. Mereka dapat menggunakannya di seluruh dapp mana pun tanpa membuat akun baru.

Identitas terdesentralisasi

Autentikasi Ethereum adalah bagian dari gerakan yang lebih luas menuju identitas berdaulat sendiri (self-sovereign identity). Standar dan proyek di ruang ini meliputi:

Bacaan lebih lanjut