Добавление usernameToken аутентификации на ONVIF deviceClient - PullRequest
0 голосов
/ 09 мая 2018

КОНТЕКСТ:

В настоящее время я пытаюсь кодировать приложение C #, чтобы получать информацию, такую ​​как канал камеры, dateTime, потоковый URL, профили и многое другое, с IP-камерыиспользуя ONVIF "стандарт" ...

Мне удалось получить системное время камеры, используя этот бит кода:

public bool Initialise(string cameraAddress, string userName, string password)
{
    bool result = false;

    try
    {
        var messageElement = new TextMessageEncodingBindingElement()
        {
            MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12, AddressingVersion.WSAddressing10)
        };

        HttpTransportBindingElement httpBinding = new HttpTransportBindingElement()
        {
            AuthenticationScheme = AuthenticationSchemes.Digest
        };

        CustomBinding bind = new CustomBinding(messageElement, httpBinding);

        System.Net.ServicePointManager.Expect100Continue = false;

        DeviceClient deviceClient = new DeviceClient(bind, new EndpointAddress($"http://{cameraAddress}/onvif/device_service"));

        var temps = deviceClient.GetSystemDateAndTime();
    }
    catch (Exception ex)
    {
        ErrorMessage = ex.Message;
    }
    return result;
}

Функция deviceClient.GetSystemDateAndTime() публикует этот XML/ SOAP конверт через http: img0

Я читаю этот XML из wireshark, когда запускаю функцию через отладчик VS2017 ...

Угадай: Я пытаюсь добавить тип аутентификации UsernameToken в свой код, чтобы я мог выполнять операции, требующие аутентификации такого типа ...

Вот изображение рабочего конверта XML / SOAP, который яхотел бы достичь: img1

Я пытался добавить эти строки в мой код:

deviceClient = new DeviceClient(bind, new EndpointAddress($"http://{cameraAddress}/onvif/device_service"));
deviceClient.ClientCredentials.HttpDigest.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
deviceClient.ClientCredentials.HttpDigest.ClientCredential.UserName = userName;
deviceClient.ClientCredentials.HttpDigest.ClientCredential.Password = password;

, но он даже не добавляет пользователя /бит пароля к XML, который я отправляю ....

ВОПРОС: Как я могу добавить это имя пользователя, добавленное взаголовок отправляемого конверта XML / SOAP?

...