1

Я разрабатываю приложение интрасети (проверка подлинности Windows), которые загружают поток отчетов с сервера отчетов, а затем сохраняют его как файл. Когда я запустил его в режиме отладки он отлично работает код, как показано ниже:.HttpWebRequest 401 error

 HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url); 

     req.UseDefaultCredentials = true; 

     HttpWebResponse response = (HttpWebResponse)req.GetResponse(); 
     Stream fStream = response.GetResponseStream(); 

Однако после того, как я разворачивал его на сервер, он не получит ответ, а не получать 401 несанкционированную ошибку.

Даже я меняю код на: HttpWebRequest req = (HttpWebRequest) WebRequest.Create (url);

 string domain = ConfigurationManager.AppSettings["SchedulerDomain"]; 
     string userName = ConfigurationManager.AppSettings["SchedulerUser"]; 
     string passWord = ConfigurationManager.AppSettings["SchedulerPassword"]; 
     NetworkCredential credential = new System.Net.NetworkCredential(userName, passWord, domain); 
     req.Credentials = credential; 

     HttpWebResponse response = (HttpWebResponse)req.GetResponse(); 
     Stream fStream = response.GetResponseStream(); 

Аналогичная ошибка. Пользовательская настройка в коде имеет разрешение на просмотр/запуск отчета.

IIS7 использует переговоры и NTLM. (Из-за сложной причины, не могу изменить Kerberos), работать под ApplicationPoolIdentity

Мой вопрос в том, что когда я запускаю его в режиме отладки, пользователь является моей учетной записью Windows, но почему это не удается, когда я пытался отправить учетные данные на сервер отчетов?

Любой может помочь?

ответ

0

Я захватил весь запрос с сервера приложений на сервер отчетов, обнаружил, что все учетные данные имени пользователя и домена, пароль имеют значение null. Наконец, я думаю, что NTLM вызывает проблему, поскольку здесь требуется два учетных данных, которые NTLM не может обработать, необходимо использовать Kerberos.

Существует еще одно решение, если вы не можете использовать аутентификацию Kerberos: отключите олицетворение asp.net, поэтому с сервера приложений на сервер отчетов будет использоваться идентификатор приложения localhost, который является учетной записью локальной машины с учетной записью как таковой: domain/имя_компьютер $. Поэтому, если вы предоставите этой учетной записи разрешение на просмотр на сервере отчетов, она должна работать.

0

Я не уверен, как настроен ваш IIS, но похоже, что параметр «Идентификация в вашем пуле приложений» для вашего приложения переопределяет любые предоставленные учетные данные. Наиболее очевидно, что пользователь, которому он пытается аутентифицироваться, не имеет доступа. При этом перейдите к своему диспетчеру IIS и проверьте настройки Identity для пула приложений сайта.

enter image description here

Изменить его пользователь, который имеет доступ к просмотру отчетов, и это должно исправить. У меня была аналогичная проблема, которую я опубликовал here, если кто-то заинтересован.

Смежные вопросы