Přejít na hlavní obsah
Change page

Autentizace na Ethereu

Pokud přicházíte z tradičního vývoje webu, jste zvyklí na přihlašování pomocí uživatelského jména a hesla, toky OAuth a relační cookies. Autentizace na Ethereu funguje jinak – a v mnoha ohledech jednodušeji.

Na Ethereu uživatel prokazuje svou identitu podepsáním zprávy pomocí své peněženky. Žádné heslo k ukládání. Žádná databáze přihlašovacích údajů, která by mohla uniknout. Jen kryptografie.

Jak se to liší od Web2?

Web2Ethereum
Uživatelské jméno + hesloAdresa peněženky + podpis
Server ukládá přihlašovací údajeUživatel drží soukromý klíč
Relace spravované pomocí cookies / JWTRelace začínají offchain podpisem peněženky
„Přihlásit se přes Google“„Přihlásit se přes Ethereum“
Procesy obnovy heslaObnova pomocí seed fráze

Zásadní posun: ve Web2 vás autentizuje centralizovaný server. Na Ethereu autentizujete sami sebe tím, že prokážete kontrolu nad konkrétní adresou – a kdokoli to může nezávisle ověřit.

Předpoklady

Ujistěte se, že rozumíte následujícím konceptům:

Jak funguje autentizace založená na peněžence

Základní postup je jednoduchý:

  1. Vaše decentralizovaná aplikace (dapp) požádá uživatele o připojení peněženky (přes MetaMask, Rainbow, WalletConnect atd.)
  2. Peněženka sdílí uživatelovu adresu na Ethereu – to je jeho veřejný identifikátor
  3. Vaše dapp vygeneruje unikátní zprávu (nonce nebo výzvu)
  4. Uživatel podepíše zprávu svým soukromým klíčem (probíhá uvnitř peněženky)
  5. Váš backend ověří podpis vůči deklarované adrese
  6. Pokud je platný, uživatel je autentizován

Žádné heslo nebylo nikdy zadáno, uloženo ani přeneseno.

Přihlášení pomocí Etherea (EIP-4361)

EIP-4361 (otevře se v nové kartě) definuje standardní formát zprávy pro přihlášení pomocí Etherea, běžně nazývaný SIWE (Sign-In with Ethereum). Nahrazuje ad-hoc podepisování zpráv strukturovaným a bezpečným standardem.

Zpráva SIWE vypadá takto:

Klíčové vlastnosti SIWE:

  • Vazba na doménu – zpráva obsahuje doménu, což zabraňuje phishingu
  • ID řetězce (Chain ID) – určuje, pro kterou síť je podpis platný
  • Nonce – zabraňuje útokům typu replay (opakování)
  • Expirace – volitelné časové razítko omezující okno platnosti
  • Zdroje – volitelné URI pro omezený přístup

Knihovny pro SIWE

Příklad: přihlášení na straně klienta pomocí siwe

Příklad: ověření na straně serveru (Node.js)

Knihovny pro připojení peněženky

Před autentizací potřebujete, aby uživatel připojil svou peněženku. Tyto knihovny to usnadňují:

Manuální ověřování podpisů

Pokud dáváte přednost nepoužívat SIWE, můžete podpisy ověřovat přímo:

Důležité bezpečnostní poznámky

  • Vždy používejte nonce – zabraňuje útokům typu replay, kdy je znovu použit starý podpis
  • Zahrňte doménu – zabraňuje tomu, aby byly podpisy platné napříč různými weby
  • Kontrolujte expiraci – podpisy by měly mít omezené okno platnosti
  • Kdykoli je to možné, použijte SIWE (EIP-4361) – řeší za vás vše výše uvedené
  • Nikdy neodhalujte soukromé klíče – podepisování probíhá uvnitř peněženky; vaše aplikace vidí pouze výsledek

Správa relací

Po autentizaci stále potřebujete relace – stejně jako ve Web2. Běžné vzory:

  • Tokeny JWT – po ověření podpisu vydejte JWT a použijte jej pro požadavky na API
  • Relace na straně serveru – uložte ověřenou adresu do relační cookie
  • SIWE se zdroji – definujte přístupové tokeny s omezeným rozsahem spojené s konkrétními URI

Klíčový rozdíl oproti Web2: adresa uživatele na Ethereu je jeho trvalou identitou. Může ji používat napříč jakoukoli dapp bez vytváření nového účtu.

Decentralizovaná identita

Autentizace na Ethereu je součástí širšího hnutí směrem k sebeurčující identitě (self-sovereign identity). Standardy a projekty v této oblasti zahrnují:

Další čtení