Перейти до вмісту

POST /api/auth/login/

Створює авторизований сеанс.

Авторизація: не потрібна.


{
"username": "tr100e",
"passwordHash": "6c2a6f1f6f1edc1c6b7b5d3f7c6c8ce6e1f6bb3f4c1f9c0b0c2d5e8f7a9b3c4d"
}
ПолеТипОбов’язковеОпис
usernameрядоктакІм’я користувача; має дорівнювати "tr100e"
passwordHashрядоктакШістнадцятковий рядок SHA-256 завдовжки 64 символи
SHA256(username + password + salt)

де salt отримано за допомогою GET /api/auth/salt/.

Важливо: сіль одноразова та стає недійсною після кожної спроби входу. Перед повторною спробою входу запитайте нову сіль.

Значення passwordHash спочатку звіряється з паролем powerUser, а потім — із паролем user. Значення accessLevel у відповіді відповідає паролю, з яким збігся хеш.

Якщо перевірку Web-пароля вимкнено налаштуванням webPwrPassEnable або webUserPassEnable, пристрій може надати відповідний рівень анонімного доступу без запиту на вхід; визначити цей рівень можна за допомогою GET /api/auth/status/. Вимкнена перевірка powerUser має пріоритет над вимкненою перевіркою user.


{
"authType": "Bearer",
"token": "ej5k2pVg4Pd8yBdUqFPq8bdaStpeAZhyelpmkhtOivdK8r7E",
"ttlSec": 60,
"accessLevel": "user"
}
ПолеТипОбов’язковеОпис
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"
}