Вход кошельком (SIWE)
Третий способ входа — подпись кошелька по стандарту SIWE (Sign-In with Ethereum). Эта страница описывает, что происходит внутри окна Fidmos, когда человек выбирает кошелёк: какие запросы уходят и какие бывают ошибки.
Как идёт вход
Заголовок раздела «Как идёт вход»-
Окно берёт одноразовый
nonce—POST /api/v1/embed/siwe/nonce:Content-Type: application/json { "flow_id": "..." }{ "nonce": "..." } -
Человек подписывает сообщение. Окно собирает SIWE-сообщение с этим
nonceи просит кошелёк его подписать — подтверждение происходит в самом кошельке. -
Окно проверяет подпись —
POST /api/v1/embed/siwe/verify:Content-Type: application/json { "flow_id": "...", "message": "...", "signature": "0x..." }Сервер восстанавливает адрес из подписи, сверяет домен и сроки сообщения и гасит
nonce. Не совпалnonce—nonce_mismatch; не прошла проверка сообщения или подписи — код из таблицы «Проверка подписи» ниже. -
Личность связывается с пользователем. Кошелёк уже привязан — поток готов к завершению (
{ "status": "authenticated", "completion_handle": "..." }); ещё не привязан — окно получаетidentity_unlinkedи заводит нового пользователя (POST /api/v1/embed/identity/createс тем жеflow_id). -
Окно завершает вход — меняет
completion_handleна код авторизации (POST /api/v1/embed/complete) и отдаёт его вашей странице черезonSuccess. Дальше — обычный обмен кода на токен.
Ошибки этого потока
Заголовок раздела «Ошибки этого потока»Все ответы с ошибкой — в конверте { "error": "<код>" }. Значения кодов и общий разбор —
в справочнике ошибок.
| Код | Когда |
|---|---|
nonce_mismatch |
nonce в сообщении не совпал с выданным |
no_pending_identity |
нет отложенного способа входа для создания пользователя |
identity_taken |
этот адрес успели привязать к другому пользователю |
invalid_completion |
завершение потока не удалось (HTTP 409) |
authorization_failed |
окно не смогло выпустить код авторизации |
flow_expired |
поток не найден или истёк |
parent_origin_mismatch |
запрос пришёл с чужого источника |
Проверка подписи
Заголовок раздела «Проверка подписи»Если проверка SIWE-сообщения или подписи не прошла, verify вернёт один из этих кодов
(партнёр по ним не ветвится — для окна это общий исход «подпись не принята»):
| Код | Когда |
|---|---|
malformed_message |
сообщение не разобралось по формату SIWE |
message_too_long |
сообщение длиннее допустимого |
bad_signature |
подпись не в том формате или не восстанавливается |
signature_mismatch |
подпись не соответствует адресу в сообщении |
malleable_signature |
подпись в «ковкой» форме (нарушен low-S) |
unsupported_version |
версия SIWE не 1 |
unsupported_chain |
сеть не Ethereum mainnet |
origin_mismatch |
uri сообщения не из разрешённых источников |
domain_mismatch |
domain сообщения не совпал с его uri |
stale_message |
метка времени вне допустимого окна |
expired_message |
наступило Expiration Time сообщения |
not_yet_valid |
ещё не наступило Not Before сообщения |