Ошибка аутентификации при прохождении запросов через прокси

#c# #asp.net #.net #networking #proxy

#c# #asp.net #.net #сеть #прокси

Вопрос:

У меня есть следующий код, который выполняет веб-запрос через прокси-сервер. Я проанализировал сетевой трафик с помощью wireshark на сервере и обнаружил, что при выполнении запроса я получаю следующую ошибку:

Не удалось аутентифицировать ваши учетные данные: «Учетные данные отсутствуют».. Вам не будет разрешен доступ, пока ваши учетные данные не будут проверены.n

Аутентификация должна выполняться через NTLM.

Кто-нибудь может помочь, пожалуйста?

     //... CALL THE CODE
    string url = String.Format("http://currencyconverter.kowabunga.net/converter.asmx/GetCultureInfo?Currency={0}", CurrencyTo.Text);
    returnValue = GetResponseValue(url);
    //...

    private static string GetResponseValue(string url)
    {
        WebRequest request = InitialiseWebRequest(url);

        WebResponse response = request.GetResponse();
        System.IO.StreamReader sr = new System.IO.StreamReader(response.GetResponseStream());

        XDocument xmlDoc = new XDocument();
        xmlDoc = XDocument.Parse(sr.ReadToEnd());

        string returnValue = xmlDoc.Root.Value;
        return returnValue;
    }

    private static WebRequest InitialiseWebRequest(string url)
    {
        WebRequest request = WebRequest.Create(url);

        if (!string.IsNullOrEmpty(ConfigurationSettings.AppSettings["proxyLogin"]))
        {
            string proxyUrl = ConfigurationSettings.AppSettings["proxyUrl"];

            if (!string.IsNullOrEmpty(ConfigurationSettings.AppSettings["proxyPort"]))
            {
                proxyUrl  = ":"   ConfigurationSettings.AppSettings["proxyPort"];
            }

            WebProxy proxy = new WebProxy(proxyUrl);

            // Create a NetworkCredential object and associate it with the Proxy property of request object.
            proxy.Credentials = new NetworkCredential(ConfigurationSettings.AppSettings["proxyLogin"], ConfigurationSettings.AppSettings["proxyPassword"]);

            NetworkCredential networkCredential = new NetworkCredential(ConfigurationSettings.AppSettings["proxyLogin"], ConfigurationSettings.AppSettings["proxyPassword"]);

            CredentialCache credentialCache = new CredentialCache();

            credentialCache.Add(new Uri(url), "NTML", networkCredential);

            request.Credentials = credentialCache;
            request.Proxy = proxy;

            return request;
        }

        return request;
    }
  

Комментарии:

1. Пока вы просматривали, заметили ли вы, что правильные учетные данные (имя пользователя / пароль, которые, я полагаю, используются для аутентификации) передаются на прокси-сервер?

2. Как мне это проверить? Я предполагал, что проверить имя пользователя / пароль будет невозможно по соображениям безопасности

Ответ №1:

Оказалось, что имя пользователя имело префикс домена, а срок действия пароля истек, и он не был обновлен в конфигурации.

После целого дня, потраченного на то, чтобы не обращать внимания на очевидное, я получил момент лампочки.