POST /api/auth/login/
Створює авторизований сеанс.
Авторизація: не потрібна.
{ "username": "tr100e", "passwordHash": "6c2a6f1f6f1edc1c6b7b5d3f7c6c8ce6e1f6bb3f4c1f9c0b0c2d5e8f7a9b3c4d"}Поля запиту
Section titled “Поля запиту”| Поле | Тип | Обов’язкове | Опис |
|---|---|---|---|
username | рядок | так | Ім’я користувача; має дорівнювати "tr100e" |
passwordHash | рядок | так | Шістнадцятковий рядок SHA-256 завдовжки 64 символи |
Формула хешу
Section titled “Формула хешу”SHA256(username + password + salt)де salt отримано за допомогою GET /api/auth/salt/.
Важливо: сіль одноразова та стає недійсною після кожної спроби входу. Перед повторною спробою входу запитайте нову сіль.
Значення passwordHash спочатку звіряється з паролем powerUser, а потім — із паролем user. Значення accessLevel у відповіді відповідає паролю, з яким збігся хеш.
Якщо перевірку Web-пароля вимкнено налаштуванням webPwrPassEnable або webUserPassEnable, пристрій може надати відповідний рівень анонімного доступу без запиту на вхід; визначити цей рівень можна за допомогою GET /api/auth/status/. Вимкнена перевірка powerUser має пріоритет над вимкненою перевіркою user.
Відповідь 200
Section titled “Відповідь 200”{ "authType": "Bearer", "token": "ej5k2pVg4Pd8yBdUqFPq8bdaStpeAZhyelpmkhtOivdK8r7E", "ttlSec": 60, "accessLevel": "user"}Поля відповіді
Section titled “Поля відповіді”| Поле | Тип | Обов’язкове | Опис |
|---|---|---|---|
authType | рядок | так | Завжди "Bearer" |
token | рядок | так | 48-символьний рядок ASCII [A-Za-z0-9] |
ttlSec | число | так | Тривалість сеансу в секундах |
accessLevel | рядок | так | "user" або "powerUser" |
Захист від перебору паролів
Section titled “Захист від перебору паролів”- Спільний лічильник невдалих спроб використовується для всіх інтерфейсів (Web, клавіатури та Modbus).
- Після
5невдалих спроб усі інтерфейси блокуються на300секунд. - Лічильник скидається після
300секунд бездіяльності або після успішного входу. - Стан зберігається в резервних регістрах RTC і не втрачається після вимкнення живлення.
Відповідь 401 (неправильний пароль)
Section titled “Відповідь 401 (неправильний пароль)”{ "error": "ERROR_UNAUTHORIZED", "message": "3 attempts left"}Відповідь 429 (активне блокування)
Section titled “Відповідь 429 (активне блокування)”{ "error": "ERROR_LOCKED", "message": "Retry after 247 seconds"}