Ana içeriğe atla
Change page

Ethereum'da Kimlik Doğrulama

Geleneksel web geliştirmeden geliyorsanız, kullanıcı adı/parola ile giriş yapmaya, OAuth akışlarına ve oturum çerezlerine alışkınsınızdır. Ethereum'da kimlik doğrulama farklı ve birçok yönden daha basit bir şekilde çalışır.

Ethereum'da bir kullanıcı, cüzdanı ile bir mesaj imzalayarak kimliğini kanıtlar. Saklanacak bir parola yoktur. Sızdırılacak bir kimlik bilgisi veritabanı yoktur. Sadece kriptografi vardır.

Web2'den farkı nedir?

Web2Ethereum
Kullanıcı adı + parolaCüzdan adresi + imza
Sunucu kimlik bilgilerini saklarKullanıcı özel anahtarı tutar
Oturumlar çerezler / JWT ile yönetilirOturumlar zincir dışı bir cüzdan imzası ile başlar
"Google ile giriş yap""Ethereum ile giriş yap"
Parola sıfırlama akışlarıKurtarma ifadesi ile geri yükleme

Temel değişim şudur: Web2'de merkezi bir sunucu kimliğinizi doğrular. Ethereum'da ise belirli bir adresi kontrol ettiğinizi kanıtlayarak kendi kimliğinizi kendiniz doğrularsınız ve herkes bunu bağımsız olarak doğrulayabilir.

Ön Koşullar

Şunları anladığınızdan emin olun:

Cüzdan tabanlı kimlik doğrulama nasıl çalışır

Temel akış basittir:

  1. Merkeziyetsiz uygulamanız (dapp) kullanıcıdan cüzdanını bağlamasını ister (MetaMask, Rainbow, WalletConnect vb. aracılığıyla)
  2. Cüzdan, kullanıcının Ethereum adresini paylaşır - bu onların açık tanımlayıcısıdır
  3. Dapp'iniz benzersiz bir mesaj oluşturur (bir nonce veya meydan okuma)
  4. Kullanıcı mesajı özel anahtarı ile imzalar (bu işlem cüzdanın içinde gerçekleşir)
  5. Arka ucunuz (backend), imzayı iddia edilen adrese karşı doğrular
  6. Geçerliyse, kullanıcının kimliği doğrulanır

Hiçbir parola yazılmamış, saklanmamış veya iletilmemiştir.

Ethereum ile Giriş Yap (EIP-4361)

EIP-4361 (yeni sekmede açılır), genellikle SIWE (Sign-In with Ethereum) olarak adlandırılan, Ethereum ile giriş yapmak için standart bir mesaj formatı tanımlar. Özel (ad-hoc) mesaj imzalamanın yerini yapılandırılmış, güvenli bir standartla değiştirir.

Bir SIWE mesajı şuna benzer:

SIWE'nin temel özellikleri:

  • Alan adı bağlama - mesaj alan adını içerir, kimlik avını (phishing) önler
  • Zincir Kimliği (Chain ID) - imzanın hangi ağ için geçerli olduğunu belirtir
  • Nonce - tekrar oynatma (replay) saldırılarını önler
  • Süre sonu - geçerlilik penceresini sınırlayan isteğe bağlı zaman damgası
  • Kaynaklar - kapsamlı erişim için isteğe bağlı URI'ler

SIWE kütüphaneleri

Örnek: siwe ile istemci tarafı giriş

Örnek: sunucu tarafı doğrulama (Node.js)

Cüzdan bağlantı kütüphaneleri

Kimlik doğrulamadan önce, kullanıcının cüzdanını bağlaması gerekir. Bu kütüphaneler işi kolaylaştırır:

İmzaları manuel olarak doğrulama

SIWE kullanmamayı tercih ederseniz, imzaları doğrudan doğrulayabilirsiniz:

Önemli güvenlik notları

  • Her zaman bir nonce kullanın - eski bir imzanın yeniden kullanıldığı tekrar oynatma (replay) saldırılarını önler
  • Alan adını dahil edin - imzaların farklı sitelerde geçerli olmasını önler
  • Süre sonunu kontrol edin - imzaların sınırlı bir geçerlilik penceresi olmalıdır
  • Mümkün olduğunda SIWE (EIP-4361) kullanın - yukarıdakilerin tümünü sizin için halleder
  • Özel anahtarları asla ifşa etmeyin - imzalama işlemi cüzdanın içinde gerçekleşir; uygulamanız yalnızca sonucu görür

Oturum yönetimi

Kimlik doğrulandıktan sonra, tıpkı Web2'de olduğu gibi hala oturumlara ihtiyacınız vardır. Yaygın kalıplar:

  • JWT token'ları - imzayı doğruladıktan sonra bir JWT verin, API istekleri için kullanın
  • Sunucu tarafı oturumlar - doğrulanmış adresi bir oturum çerezinde saklayın
  • Kaynaklarla SIWE - belirli URI'lere bağlı kapsamlı erişim token'ları tanımlayın

Web2'den temel farkı: Kullanıcının Ethereum adresi onun kalıcı kimliğidir. Yeni bir hesap oluşturmadan herhangi bir dapp genelinde kullanabilirler.

Merkeziyetsiz kimlik

Ethereum kimlik doğrulaması, kendi kendine egemen kimliğe (self-sovereign identity) doğru daha geniş bir hareketin parçasıdır. Bu alandaki standartlar ve projeler şunları içerir:

Daha fazla bilgi