2016-01-19 5 views
1

Я хотел бы знать, как я могу исправить эту проблему, когда WebApp, запущенный на IIS 7/8 с Windows Authentication, бросает ошибку 401 при выполнении HttpWebRequest на другой сайт. Этот WebApp отлично работает, если я запускаю его локально в режиме отладки.401 Ошибка аутентификации во время работы C# Применение приложения HttpWebRequest

Вот фрагмент кода

HttpWebRequest webReq; 
webReq = (HttpWebRequest)WebRequest.Create("http://sharepoint_site/_vti_bin/listdata.svc/mylist); 
webReq.Accept = "application/json"; 
webReq.UseDefaultCredentials = true; 
webReq.Credentials = CredentialCache.DefaultNetworkCredentials; 
//webReq.Credentials = new NetworkCredential("user","password","domain"); 

webReq.Method = "GET"; 
webReq.KeepAlive = true; 
Stream objStream = webReq.GetResponse().GetResponseStream(); 
StreamReader objReader = new StreamReader(objStream); 
HttpWebResponse response = (HttpWebResponse)webReq.GetResponse(); 

Я также был в состоянии сделать его работу путем добавления записи BackConnectionHostNames в реестре

HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Lsa \ MSV1_0

но мне нужно передать учетные данные (комментарий выше), которые мне не нравятся, потому что я не хочу использовать свою учетную запись или любую учетную запись службы.

Я хочу, чтобы WebApp использовал DefaultNetworkCredentials или DefaultCredentials. Я включил проверку подлинности Windows и поставщика NTLM в IIS на компьютере, на котором размещен этот WebApp.

Любая помощь будет принята с благодарностью, спасибо и больше энергии этому сообществу.

ответ

1

CredentialCache.DefaultNetworkCredentials использует сетевые учетные данные, в которых выполняется процесс. Если он запущен в IIS, это будет идентификатор пула приложений, который веб-служба не примет.

Вам придется либо передать разные учетные данные в коде (что вы сказали, что не хотите делать), либо обновить пул приложений для запуска с сетевыми учетными данными (щелкните правой кнопкой мыши пул приложений в IIS -> Дополнительные настройки - > Identity)

+0

ОК Я установил идентификатор пула приложений в качестве Сетевой службы. Я также не хочу размещать пользовательскую учетную запись. Не следует ли передавать учетные данные текущего зарегистрированного пользователя в сети вплоть до вызова HttpWebRequest? – Joms

+0

Являются ли пользователи аутентифицированы на вашем веб-сайте, используя их сетевые учетные данные? Вы можете включить [Олицетворение] (https://msdn.microsoft.com/en-us/library/aa292118 (v = vs.71) .aspx), чтобы использовать учетные данные человека, посещающего сайт. –

+0

Я включил олицетворение, а затем переключился на классический режим конвейера, но все равно получаю ошибку 401, если я не предоставил пользовательский идентификатор в пуле приложений, который я не хочу. Я попробовал как Network Service, так и ApplicationPoolIdentity, но все равно не пошел. Является ли это ограничением NTLM, которое не может передавать учетные данные с родительского сайта на другой сайт? – Joms