- Сайт формирует ссылку
- Пользователь подтверждает транзакцию
- Oberton информирует сайт
- Авторизация пользователя
Формирует параметры авторизации, кодирует значения ключей параметров согласно стандарта URL-encoded format https://www.w3schools.com/tags/ref_urlencode.ASP, на напримере ключа параметра callbackUrl
https://callback.url => https%3A%2F%2Fcallback.url
и отрпавляет пользователя через диплинк https://oberton.io/deeplink с этими параметрами в приложение, пример ниже:
type
Константное значение auth
Обязательный параметр, по нему oberton поймёт, что это запрос авторизации через кошелёк.
id
Значение string
Рекомендуемое значение: идентификатор запроса по которому бэкенд сайта найдёт у себя otp
otp
Значение string
Рекомендуемое значение: одноразовый пароль привязанный к генерации этой ссылки или этого QR кода. Рекомендуется связать с текущей сессией пользователя.
callbackUrl
Значение string
url на который кошелёк отправит POST запрос, подтверждающий владение пользователем конкретным кошельком.
warningText
Значение string
Сообщение которое пользователь увидит при авторизации.
Пользователь в кошельке видит запрос на авторизацию с текстом из параметра warningText
Пользователь подтверждает транзакцию
Oberton берёт адрес кошелька пользователя и otp. Подписывает получившуюся строку приватным ключём пользователя.
Получившиюся подпись отправляет на callbackUrl пользователя вместе с сопутствующими данными
-
Сайт получает POST запрос от Oberton
-
По параметру id сайт находит otp у себя в локальной БД
-
Берём из ответа addr адрес кошелька и pk проверяем через БЧ что у этого кошелька есть такой публичный ключ.
-
Проверяем корректность подписи.
const { hash } = await this.crypto.sha256({
data: Buffer.from(`${otp}${callbackUrl}${address}`, 'utf-8').toString(
'base64'
),
});
const { succeeded } = await this.client.crypto.nacl_sign_detached_verify({
unsigned: Buffer.from(hash, 'hex').toString('base64'),
signature: Buffer.from(signature.replace(/ /g, '+'), 'base64').toString('hex'),
});
- Пользователя можно авторизовать в системе.