Перейти до основного вмісту
Change page

Аутентифікація в Етеріумі

Якщо ви перейшли з традиційної веброзробки, ви звикли до входу за допомогою імені користувача та пароля, потоків OAuth і сесійних файлів cookie. Аутентифікація в Етеріумі працює інакше — і багато в чому простіше.

В Етеріумі користувач підтверджує свою особу шляхом підписання повідомлення за допомогою свого гаманця. Немає паролів, які потрібно зберігати. Немає бази даних облікових даних, яка може витекти. Лише криптографія.

Чим це відрізняється від Веб2?

Веб2Етеріум
Ім'я користувача + парольАдреса гаманця + підпис
Сервер зберігає облікові даніКористувач володіє приватним ключем
Сесії керуються через cookie / JWTСесії починаються з позамережевого підпису гаманця
«Увійти через Google»«Увійти через Етеріум»
Процеси скидання пароляВідновлення через сід-фразу

Фундаментальна зміна: у Веб2 вас аутентифікує централізований сервер. В Етеріумі ви аутентифікуєте себе самі, доводячи, що контролюєте певну адресу — і будь-хто може перевірити це незалежно.

Передумови

Переконайтеся, що ви розумієте:

Як працює аутентифікація на основі гаманця

Основний процес простий:

  1. Ваш децентралізований застосунок (dapp) просить користувача підключити свій гаманець (через МетаМаск, Rainbow, WalletConnect тощо)
  2. Гаманець ділиться адресою Етеріуму користувача — це його публічний ідентифікатор
  3. Ваш dapp генерує унікальне повідомлення (нонс або виклик)
  4. Користувач підписує повідомлення своїм приватним ключем (це відбувається всередині гаманця)
  5. Ваш бекенд перевіряє підпис на відповідність заявленій адресі
  6. Якщо підпис дійсний, користувач проходить аутентифікацію

Жоден пароль не вводився, не зберігався і не передавався.

Вхід через Етеріум (EIP-4361)

EIP-4361 (відкривається в новій вкладці) визначає стандартний формат повідомлення для входу через Етеріум, який зазвичай називають SIWE (Sign-In with Ethereum). Він замінює несистемне підписання повідомлень на структурований, безпечний стандарт.

Повідомлення SIWE виглядає так:

Ключові особливості SIWE:

  • Прив'язка до домену — повідомлення містить домен, що запобігає фішингу
  • ID ланцюга (Chain ID) — вказує, для якої мережі дійсний підпис
  • Нонс — запобігає атакам повторного відтворення (replay attacks)
  • Термін дії — необов'язкова часова мітка, що обмежує вікно дійсності
  • Ресурси — необов'язкові URI для доступу з обмеженою областю дії

Бібліотеки SIWE

Приклад: вхід на стороні клієнта за допомогою siwe

Приклад: перевірка на стороні сервера (Node.js)

Бібліотеки для підключення гаманця

Перед аутентифікацією потрібно, щоб користувач підключив свій гаманець. Ці бібліотеки полегшують цей процес:

Перевірка підписів вручну

Якщо ви не бажаєте використовувати SIWE, ви можете перевіряти підписи безпосередньо:

Важливі зауваження щодо безпеки

  • Завжди використовуйте нонс — це запобігає атакам повторного відтворення, коли використовується старий підпис
  • Включайте домен — це запобігає використанню підписів на інших сайтах
  • Перевіряйте термін дії — підписи повинні мати обмежене вікно дійсності
  • Використовуйте SIWE (EIP-4361), коли це можливо — він автоматично обробляє все вищезазначене
  • Ніколи не розкривайте приватні ключі — підписання відбувається всередині гаманця; ваш застосунок бачить лише результат

Керування сесіями

Після аутентифікації вам усе ще потрібні сесії — так само, як і у Веб2. Поширені патерни:

  • Токени JWT — випускайте JWT після перевірки підпису, використовуйте для запитів до API
  • Сесії на стороні сервера — зберігайте перевірену адресу в сесійному файлі cookie
  • SIWE з ресурсами — визначайте токени доступу з обмеженою областю дії, прив'язані до конкретних URI

Ключова відмінність від Веб2: адреса Етеріуму користувача є його постійною ідентифікацією. Він може використовувати її в будь-якому dapp без створення нового акаунта.

Децентралізована ідентифікація

Аутентифікація в Етеріумі є частиною ширшого руху до суверенної ідентифікації (self-sovereign identity). Стандарти та проєкти в цій сфері включають:

Додаткові матеріали