Я пытаюсь добавить функциональность в свое приложение C#, чтобы протестировать подключение к службе OData, которая защищена только с помощью проверки подлинности Windows. Следующий блок кода, что я использую, чтобы выполнить этот тест:Аутентификация Windows для службы OData возвращает «401 - Несанкционированное» в приложении C#, но работает в браузере
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(new Uri(SERVICE_NAME));
CredentialCache myCache = new CredentialCache();
myCache.Add(new Uri(SERVICE_NAME), "Negotiate", new NetworkCredential(user, password));
resolver.Credentials = myCache;
// Do a simple request
request.Credentials = myCache;
request.PreAuthenticate = true;
request.KeepAlive = true;
request.AllowAutoRedirect = true;
request.CookieContainer = new CookieContainer();
object response = request.GetResponse(); // This is where the exception is thrown
Когда я запускаю приведенный выше код, я получаю 401 - Несанкционированное ошибку, как указано ранее. Однако, когда я запускаю Fiddler2, код работает нормально. Поэтому вместо этого я использую Wireshark. Кроме того, служба работает идеально в моем браузере (Chrome), и если я использую Wireshark для сравнения HTTP-запросов/ответов для аутентификации, я вижу, что они почти идентичны, за исключением того, что в Chrome у меня есть: Accept, User-Agent , Accept-Encoding и Accept-Language, в то время как мое приложение C# не имеет этих. Единственное отличие состоит в том, что мое приложение C# устанавливает флаг «Negotiate Seal» в заголовке NTLM, в то время как Chrome не устанавливает этот флаг.
Несмотря на эти различия, фаза аутентификации, по-видимому, отлично работает в приложении C#, пока служба не вернет 302 - перенаправление, после чего приложение пробует GET на вновь перенаправленном URI, который снова возвращает 401 (когда Chrome делает аналогичное GET, он получает HTTP 200 - OK и продолжает свой веселый путь).
Итак, любые идеи, что может вызвать это? Проблема с сервисом? или мой код?
Большое спасибо! -Erik