Разрешить pairing без доп пароля

This commit is contained in:
AidarKC
2026-06-15 00:54:56 +04:00
parent 49fdbbf7ae
commit bef205aec7
10 changed files with 94 additions and 27 deletions
+4 -2
View File
@@ -188,6 +188,8 @@ K9v3nQ4u8jYk0a2p7cD4mLx1zR0sT5wV6bN8eH3fQ1M
}
```
Если pairing должен работать **без доп. пароля**, клиент может включить его с пустым `passwordHash`.
### Успешный ответ
```json
@@ -205,7 +207,6 @@ K9v3nQ4u8jYk0a2p7cD4mLx1zR0sT5wV6bN8eH3fQ1M
### Ошибки
- `400 / EMPTY_PASSWORD_HASH` — попытка включить pairing без `passwordHash`.
- `463 / PAIRING_REQUIRES_AUTH_SESSION` — операция вызвана без уже авторизованной доверенной сессии пользователя.
### 5.2. `StartEspPairing`
@@ -229,6 +230,8 @@ K9v3nQ4u8jYk0a2p7cD4mLx1zR0sT5wV6bN8eH3fQ1M
}
```
Если на доверённом устройстве pairing включён **без доп. пароля**, новое устройство может отправить пустой `passwordHash`.
Поле `trustedSessionOnline` показывает, что у пользователя сейчас есть хотя бы одна онлайн доверенная сессия, способная принять pairing-заявку.
### Успешный ответ
@@ -253,7 +256,6 @@ K9v3nQ4u8jYk0a2p7cD4mLx1zR0sT5wV6bN8eH3fQ1M
### Ошибки
- `400 / EMPTY_LOGIN`
- `400 / EMPTY_PASSWORD_HASH`
- `400 / EMPTY_REQUESTER_SESSION_KEY`
- `400 / BAD_REQUESTER_SESSION_KEY`
- `400 / BAD_SESSION_TYPE`
@@ -4,11 +4,13 @@
- в UI добавлен новый сценарий подключения устройства через доверенную уже авторизованную сессию пользователя;
- на экране входа появилась кнопка `Войти через другое устройство`;
- на доверённом устройстве в `Подключить устройство` появилась кнопка `Подключить по коду`;
- доверённое устройство может включить pairing-пароль, увидеть заявки, подтвердить подключение только с `device key` или с передачей выбранных ключей.
- доверённое устройство может включить pairing с доп. паролем или без него, увидеть заявки, подтвердить подключение только с `device key` или с передачей выбранных ключей.
- что именно проверять:
- на уже авторизованном устройстве включить pairing-пароль;
- на новом устройстве открыть `Войти через другое устройство`, ввести `login + pairing password` и получить 7-значный код;
- на уже авторизованном устройстве включить pairing без доп. пароля;
- на новом устройстве открыть `Войти через другое устройство`, оставить галочку доп. пароля выключенной и получить 7-значный код;
- отдельно включить pairing с доп. паролем;
- на новом устройстве открыть `Войти через другое устройство`, включить галочку доп. пароля, ввести `login + pairing password` и получить 7-значный код;
- на доверённом устройстве открыть `Подключить по коду`, найти заявку по коду и подтвердить её:
- без доп. ключей;
- с передачей выбранных ключей;
@@ -36,7 +36,7 @@
Цель:
- новое устройство знает `login + pairing password`;
- новое устройство знает `login`, а `pairing password` используется только если он включён на доверённом устройстве;
- сервер использует пароль только как фильтр от мусора;
- реальное доверие даёт любая уже онлайн доверенная сессия пользователя;
- сервер не выдаёт приватные ключи сам от себя.
@@ -58,7 +58,7 @@
## 3. Что именно делает сервер
- хранит включённость pairing и opaque `passwordHash`;
- хранит включённость pairing и optional opaque `passwordHash`;
- хранит pending/approved/rejected pairing-заявки;
- рассчитывает короткий код `shortCode` из `7` цифр;
- рассчитывает длинный `fingerprintB58` из `SHA-256` заявки;
@@ -101,6 +101,6 @@
Эта схема даёт нужное разделение доверия:
- пароль на сервере только отсеивает лишних;
- пароль на сервере, если он включён, только отсеивает лишних;
- онлайн доверенная сессия решает, добавлять ли новую сессию;
- сервер остаётся маршрутизатором и хранилищем состояния, а не владельцем секретов.