У меня камера SNC-CH110 от Sony. Пользователь по умолчанию 'admin' и пароль тоже 'admin'. Моя большая проблема заключается в аутентификации.
SOAP-ENV:Sender
ter:NotAuthorized
Sender not Authorized
The action requested requires authorization and the sender is not authorized
Согласно спецификации ONVIF 1.02, я использую "профиль токена имени пользователя" для аутентификации, который описан в спецификации http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0.pdf или в http://www.onvif.org/Portals/0/documents/WhitePapers/ONVIF_WG-APG-Application_Programmer%27s_Guide.pdf
Ниже приведен скрипт, который я использую для формирования мыльного запроса:
admin
" + hashBase64 + @"
" + Convert.ToBase64String(_nonce) + @"
" + dt + @"
All
"
Вот мой код для отправки запроса:
byte[] _nonce = new byte[16];
RandomNumberGenerator rndGenerator = new RNGCryptoServiceProvider();
rndGenerator.GetBytes(_nonce);
// get other operands to the right format
string dt = DateTime.UtcNow.ToString("yyyy-MM-ddThh:mm:ss.fffZ");
byte[] time = Encoding.UTF8.GetBytes(dt);
byte[] pwd = Encoding.UTF8.GetBytes("admin");
byte[] operand = new byte[_nonce.Length + time.Length + pwd.Length];
Array.Copy(_nonce, operand, _nonce.Length);
Array.Copy(time, 0, operand, _nonce.Length, time.Length);
Array.Copy(pwd, 0, operand, _nonce.Length + time.Length, pwd.Length);
// create the hash
SHA1 sha1 = SHA1.Create();
string hashBase64 = Convert.ToBase64String(sha1.ComputeHash(operand));
XmlDocument xml = new XmlDocument();
xml.Load("../../../xml/GetCapabilities.xml");
Communication.SendTcpXml(xml.InnerXml, new Uri("http://192.168.1.25/onvif/device_service"));
Я действительно запутался, потому что не могу найти ошибку. Очень интересно, что когда я использую дату, пароль, nonce и имя пользователя из программы ONVIF Device Manager (я взял его через Wireshark), то у меня все получается. Но я не понимаю, как эта программа хэширует пароль, потому что я делаю это точно по спецификации, и когда я использую ту же дату, nonce и пароль, я не могу получить такой же хэшированный пароль, как эта программа. Я буду благодарен за любую помощь, спасибо.