“SIWC” - Ваш новый стандарт аутентификации Web3 вместе с Conflux. 

“SIWC” - Ваш новый стандарт аутентификации Web3 вместе с Conflux. 


@confluxrussians

«Вход с помощью Conflux»(Sign in with Conflux, далее SIWC)— это новый Web3 стандарт, благодаря которому появилась возможность аутентификации входа в онлайн сервисы с помощью адреса блокчейн сети, а не используя привычный всем нам, метод пары: «логин+пароль»

 Данный стандарт описывает метод аутентификации адресов сети Conflux, посредством офф-чейн сервисов, подписывая сообщения стандартного формата с указанием параметров области применения, деталями сессии и механизмами безопасности(например, такими как nonce).

 Цели данной спецификации — предоставить полноценную альтернативу централизованным сервисам идентификации, улучшить взаимодействие между офф-чейн сервисами аутентификации на основе сети Conflux и предоставить операторам Web3 кошельков и децентрализованных приложений (dApp) согласованный машиночитаемый формат сообщений для улучшения взаимодействия с пользователями и управления разрешениями и согласием.

 Стандарт SIWC написан на основе стандарта “Sign In with Ethereum”(Вход с помощью Ethereum).
Вы можете легко и быстро добавить поддержку стандарта
SIWC в свой собственный проект, с помощью библиотеки npm.


 Руководство по добавлению SIWC


 Для того,чтобы добавить SIWC в ваш проект, предварительно установите библиотеку npm и выполните следующие команды:

 npm i siwc
npm i siwc-parser

 Если Вы используете yarn, выполните:

 yarn add siwc
yarn add siwc-parser

 Стандарт SIWC совместим с большинством EVM HD кошельков, в том числе с кошельками Fluent и MetaMask.

Сценарии реализаций SIWC описаны в SIWC QuickStart.

 SIWC Quickstart — это базовая простейшая реализация клиент/сервер, которая поможет разработчикам запустить и ознакомится с примерами сценариев SIWC в режиме реального времени.

 После того, как Вы добавите поддержку SIWC в ваш проект, вам потребуется сигнатура(подпись) для аутентификации с онлайн сервисами и приложениями. Получить сигнатуру возможно посредством подписи сообщения вашего адреса сети Conflux.

Пример входа в Conflux eSpace


 Процедуру верификации сигнатуры можно выполнить посредством API. В случае если сигнатура указана верно, API вернет вам ответ: “true”

 В SIWC Quickstarter доступно примеры четырёх сценариев:

 00_print

 Печатает в консоли пример простейшего сообщения входа.

 01_interface

 Пример реализации сценария создания сигнатуры и ее верификации стороны на Javascript.

 02_backend

 Пример реализации сценария проверки сигнатуры посредством API в NodeJS.

 03_complete_app

 Пример простого полноценного приложения со сценарием входа на Frontend и verification/getInfromations API для backend.

 Реализация

В вашем проекте вы можете использовать SIWC, следуя нижеприведенному примеру:

 Frontend с Conflux eSpace

 Простейшее сообщения входа и верификация на Conflux eSpace.

const message = await createSiwcMessage(
 await signer.getAddress(),
 'Sign in with Conflux to the app.'
);
const signature = await signer.signMessage(message);
fetch(`${BACKEND_ADDR}/verify`, {
 method: 'POST',
 headers: {
  'Content-Type': 'application/json',
 },
 body: JSON.stringify({ message, signature, 'espace' }),
 credentials: 'include',
});

 Frontend c Conflux Core

 Простейшее сообщение входа и верификация на Conflux Core

 const message = await createSiwcMessage(
 {accountId},
 'Sign in with Conflux to the app.',
 {chain ID}
);
const signature = await window.conflux.request({
  method: `personal_sign`,
  params: [message, {accountId}],
 });
fetch(`${BACKEND_ADDR}/verify`, {
 method: 'POST',
 headers: {
  'Content-Type': 'application/json',
 },
 body: JSON.stringify({ message, signature, 'core' }),
 credentials: 'include',
});

 Примечание: accountId — открытый ключ, ваш адрес в сети Conflux, chainID — 1 для тестовой сети и 1029 для основной сети.

 Backend

Данный пример описывает сценарий проверки соответствия сигнатуры с сообщением для входа.

 app.post('/verify', async function (req, res) {
    try {
        if (!req.body.message) {
            res.status(422).json({
                message: 'Expected prepareMessage object as body.',
            });
            return;
        }
let message = new SiwcMessage(req.body.message);
        const { space } = req.body;
        const spaceEnum =
            space === 'core' ? Space.CONFLUX_CORE : Space.CONFLUX_E_SPACE;
const fields = await message.validate(req.body.signature, spaceEnum);
        if (fields.nonce !== req.session.nonce) {
            console.log(req.session);
            res.status(422).json({
                message: `Invalid nonce.`,
            });
            return;
        }
        req.session.siwc = fields;
        req.session.cookie.expires = new Date(fields.expirationTime);
        req.session.save(() => res.status(200).end());
    } catch (e) {
        req.session.siwc = null;
        req.session.nonce = null;
        console.error(e);
        switch (e) {
            case ErrorTypes.EXPIRED_MESSAGE: {
                req.session.save(() =>
                    res.status(440).json({ message: e.message })
                );
                break;
            }
            case ErrorTypes.INVALID_SIGNATURE: {
                req.session.save(() =>
                    res.status(422).json({ message: e.message })
                );
                break;
            }
            default: {
                req.session.save(() =>
                    res.status(500).json({ message: e.message })
                );
                break;
            }
        }
    }
});


 Полная версия примера находится в разделе 03_complete_app проекта SIMC Quickstart


Оригинальная страница SIWC на форуме Conflux


Оригинальная идея: https://github.com/MPoulhazan , @KCharlemagne

Куратор проекта: https://github.com/Thegaram/Thegaram, @thegaram

Автор перевода: https://t.me/confluxcm, @Mitrandir, русскоязычное сообщество Сonflux


Отдельная благодарность автору оригинальной идеи, куратору проекта, а также амбассадору проекта Conflux @Nico

 Полезные ссылки

 SIWC | SIWC QuickStart | SIWC на ​​NPM |

 Sign in with Ethereum


Присоединяйтесь к русскоязычному сообществу проекта Conflux Network:

Telegram | Официальный сайт |
Новостной канал в Telegram



Report Page