Digest авторизация. Где ошибка?

max dmt

Member
Приветствую, дорогое сообщество!

Регик Dahua DHI-NVR2104-P-I2
Камера Dahua DH-IPC-HFW2449S-S-IL
Документация DAHUA_HTTP_API_V2.76 for ipcamtalk._com

Не получается авторизоваться. Помогите пож разобраться что я делаю не так.
Проверял и на камере, и на регистраторе - результат один.

Задача: получить время о регика или камеры.
/cgi-bin/global.cgi?action=getCurrentTime


Делаю первый запрос и получаю ответ
Digest realm="Login to 2bc9b39c8a5db985597903ab6713a743", qop="auth", nonce="8444117777", opaque=""

т.е.
DigestRealm: 2bc9b39c8a5db985597903ab6713a743
qop: auth
nonce: 8444117777
opaque:


Насколько я понял эти реквизиты создает клиент по свему усмотрению
cnonce: 0a1f1131
cn: 00000002


Считаем
HA1 = HashVal("admin:" + DigestRealm + ":" + "admin1");
HA2 = HashVal("GET:" + requeststr);
Response = HashVal(HA1 + ":" + nonce + ":" + cn + ":" + cnonce + ":" + qop + ":" + HA2);
т.е.
HA1: 774A814127C1F7CADA60C83B7DC85023
HA2: 0BF3D80D3BC05E4C9BBDEF3C92139994
Response: E29E77F74EA8E5247B20E23160F2C0A8



Делаю второй запрос, в Header помещаю
Authorization:
Digest username="admin",
realm="2bc9b39c8a5db985597903ab6713a743",
nonce="8444117777",
nc=00000001,
cnonce="0a1f1131",
uri="/cgi-bin/global.cgi?action=getCurrentTime",
qop="auth",
opaque="",
response="E29E77F74EA8E5247B20E23160F2C0A8"


Ответ снова
StatusCode: 401

и либо
Answer: Error
Invalid Authority!

либо новые реквизиты для логина типа
Digest realm="Login to 2bc9b39c8a5db98559...", qop="auth", nonce="943307...", opaque=""

Это был пример подключения к регистратору.
Если подключаться к камере, то разница лишь в формате реквизита realm
Digest realm="Login to FEEDF1F984888B9E", qop="auth", nonce="c4b97dcb-6d7e-417d-8582-d6d7ee4f34ae", opaque=""


Проверял значение realm в форматах "Login to FEEDF1F984888B9E" и в "FEEDF1F984888B9E".
С реквизитами nonce, nc и без них. Смущает конечно, что реквизит opaque всегда пустой.

Как-то так.
 

max dmt

Member
....
Удалось подключиться к камере.
Для этого все результаты MD5 перевел в нижний регистр.
Вернул Login to в реквизит Digest realm.
Убрал реквизиты cnonce и cn из Header и вычисления response.
т.е. сейчас
Response = Lower(HashVal(HA1 + ":" + nonce + ":" + qop + ":" + HA2));

Header
Authorization:
Digest username="admin",
realm="2bc9b39c8a5db985597903ab6713a743",
nonce="8444117777",
uri="/cgi-bin/global.cgi?action=getCurrentTime",
qop="auth",
opaque="",
response="..."


К регистратору пока подключиться не удалось.
Подозреваю что к нему и документация отдельная нужна))

Напишите пож, если есть какие-либо замечания..
 
Останнє редагування:

max dmt

Member
Так и не получилось подключиться к NVR, причем даже не пишет об ошибке, просто высылает новые реквизиты для Digest авторизации.
Гугл не помогает.
Неужели никто не подключался к рекордеру по http?
 
Зверху