ONVIF Ошибка NotAuthorized: сбой проверки WS-Security UsernameToken
- SOAP-запрос к веб-службе камеры завершается ошибкой
<env:Value>env:Sender</env:Value> <ter:Value>ter:NotAuthorized</ter:Value>. - VMS/NVR не может получить RTSP-ссылку или профили через
GetProfiles/GetStreamUri. - Логин и пароль в веб-интерфейсе камеры работают, но внешние интеграции отклоняются.
1. Причины ошибки ONVIF NotAuthorized
Ошибка авторизации спецификации ONVIF Core Specification генерируется в следующих случаях:
- Некорректно рассчитан хеш PasswordDigest в заголовке WS-Security;
- Рассинхронизация времени: Разница между таймстемпом в запросе (
wsu:Created) и часами камеры превышает допустимое окно (обычно 5–30 секунд); - Учетная запись существует только в веб-интерфейсе, но не добавлена в базу пользователей ONVIF (характерно для Dahua/Hikvision/Uniview);
- Некорректная генерация случайного числа
Nonce(отсутствие Base64-кодирования или повторное использование Nonce).
2. Корректный расчет WS-Security PasswordDigest
По стандарту ONVIF формула дайджеста имеет вид:
Password_Digest = Base64( SHA-1( Raw_Nonce + Created_Timestamp + Password ) )Пример корректного XML-заголовка авторизации:
<soapenv:Header>
<wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<wsse:UsernameToken>
<wsse:Username>admin</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">LKjshdf8934kjshd89f=</wsse:Password>
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">bW9jaw==</wsse:Nonce>
<wsu:Created>2025-01-15T12:00:00.000Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>3. Проверка синхронизации времени по протоколу NTP
Время в теге wsu:Created обязано быть представлено в формате UTC (Zulu Time). Выполните синхронизацию часов камеры и управляющего сервера по единому NTP-серверу.
4. Активация ONVIF и создание пользователя на камере
На современных устройствах Hikvision/Dhua протокол ONVIF по умолчанию отключен:
- Перейдите в веб-интерфейс камеры: Configuration -> Network -> Advanced Settings -> Integration Protocol;
- Установите флаг Enable ONVIF / Open Network Video Interface;
- Нажмите кнопку Add и создайте отдельного пользователя с уровнем прав
AdministratorилиMedia User.
Частые вопросы (FAQ)
Почему авторизация работает по HTTP Digest, но падает в ONVIF SOAP?
HTTP Digest авторизация управляется веб-сервером камеры, а ONVIF SOAP запросы обрабатываются отдельным демоном onvif-server со своей таблицей пользователей и строгой валидацией WS-Security.
Какая максимальная погрешность времени допускается стандартом ONVIF?
Большинство камер отклоняют запросы, если разница между меткой времени wsu:Created и внутренними часами камеры превышает ±10 секунд для предотвращения Replay-атак.
Нужно ли отправлять заголовок Security при каждом SOAP запросе?
Да, если не используется сессионный механизм на базе WS-Trust/OAuth, заголовок WS-Security UsernameToken со свежей меткой Created и новым Nonce должен присутствовать в каждом запросе.
Поддерживают ли камеры передачу пароля в открытом виде (PasswordText)?
По соображениям безопасности тип PasswordText в современных прошивках отключен по умолчанию и работает только поверх зашифрованного HTTPS соединения.