Проверка подлинности сокетов не удается с помощью NegotiateStream - PullRequest
1 голос
/ 19 марта 2009

У меня подключен сокет, который я использую для получения ответов HTTP-заголовка. Если я пропускаю аутентификацию, все работает нормально (если страница не требует аутентификации). Но когда я вступаю в этот код, он всегда выдает IOException в строке AuthenticateAsClient. Сообщение: «Невозможно прочитать данные из транспортного соединения: соединение было закрыто». Я пробовал как DefaultCredentials, так и DefaultNetworkCredentials.

Есть идеи, что мне не хватает? Что вызывает закрытие соединения?

спасибо

if (Authenticate)
{

    NetworkStream clientStream = new NetworkStream(webSocket, false);
    NegotiateStream authStream = new NegotiateStream(clientStream);

    NetworkCredential netcred = CredentialCache.DefaultNetworkCredentials;


    try
    {
        authStream.AuthenticateAsClient(netcred,
            String.Empty,
            ProtectionLevel.None,
            TokenImpersonationLevel.Identification);

        if (!authStream.IsAuthenticated)
        {
            Console.WriteLine("Authentication failed");
            ErrorText = "Authentication using default credentials failed";
            return (HttpStatusCode)(-1);
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
        ErrorText = ex.Message;
        return (HttpStatusCode)(-1);
    }
}

1 Ответ

0 голосов
/ 19 марта 2009

NegotiateStream не выполняет аутентификацию HTTP:

В системах Windows 95/98 Windows NT LAN Manager (NTLM) - это протокол, используемый для аутентификации. На других платформах протокол Kerberos используется для аутентификации, если и клиент, и сервер поддерживают его; в противном случае используется NTLM.

Посмотрите на класс WebClient , который предоставляет учетные данные и ResponseHeaders свойство.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...