развернутое веб-приложение возвращает - 401 несанкционированный - PullRequest
1 голос
/ 02 июня 2011

Я развернул свое веб-приложение, созданное в Visual Studio 2010, на удаленном сервере с IIS 6.0 Windows 2003.

При попытке перейти на сайт возвращается заголовок по умолчанию и в теле страницы появляется ошибка:

Запрос не выполнен с HTTP-статусом 401: не авторизован

Теперь я вошел в систему как администратор и соответственно установил разрешения и безопасность каталога.

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

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

Кто-нибудь думает, что это связано с доступом к серверу отчетов, который является другим сервером или локальным доступом к сайту на производственном / хост-сервере?

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

Ответы [ 3 ]

3 голосов
/ 02 июня 2011

Почти наверняка проблема безопасности файловой системы NTFS, вам нужно добавить IUSR_<your machine name> и ASPNET (учетная запись пользователя компьютера ASP.NET) с правами чтения и выполнения для папки, в которой находится ваш сайт / приложение.

1 голос
/ 02 июня 2011

Мне интересно, если вы разрешаете анонимный доступ, вы указываете пользователя, который будет использоваться в этом случае? Если да, имеет ли этот пользователь доступ для чтения / выполнения файлов веб-приложения? Если вы не указали пользователя, у вас должен быть пользователь по умолчанию «IIS_USR» (я думаю, что это Windows Server 2003). Вы должны убедиться, что этот пользователь имеет доступ для чтения / записи в каталоге вашего приложения.

0 голосов
/ 23 марта 2017

Это старый вопрос, но эта ошибка внезапно начала появляться в наших собственных приложениях вчера, после исправления Microsoft Security.

Причина заключалась в том, что у нас были некоторые сайты, работающие на IIS, и их пулы приложений настроены для работы под учетной записью NetworkService. До вчерашнего дня без проблем все нормально работало. Но после патча почти все наши пользователи получали ошибки «401 Unauthorized».

Для этого есть три решения:

  • измените веб-сайт для работы под учетной записью "реального" пользователя и убедитесь, что у этого пользователя есть разрешение на чтение файлов в папке IIS этого сайта. Другими словами, щелкните правой кнопкой мыши эту папку, выберите вкладку «Безопасность» и добавьте разрешения для этого пользователя.
  • измените разрешения для папки веб-сайта и убедитесь, что YOURCOMPUTERNAME\Users имеет разрешение на доступ к этой папке. Да, это реальная учетная запись, и мы подозреваем, что исправление Microsoft фактически удалило эти разрешения.
  • оставьте для пула приложений веб-сайта значение NetworkService, но, опять же, убедитесь, что пользователи, которые будут использовать этот веб-сайт do имеют права на чтение файлов в папке IIS этого сайта. Итак, у нас была группа Active Directory, содержащая пользователей, которые будут использовать этот веб-сайт, поэтому мы добавили эту группу AD на вкладку Безопасность папки и убедились, что они могут получить доступ к файлам.

Опять же, странно, что наши сайты прекрасно работали до этого патча.

И на всякий случай, если кто-нибудь еще столкнется с этой проблемой в 2017 году, мне также пришлось добавить одну строку кода C #, чтобы использовать «UseDefaultCredentials» в моей функции для вызова веб-службы. Опять же, до патча Microsoft эта строка не существовала и работала нормально. Но после патча мы получили 401 ошибку, пока я не добавил эту строку.

public string CallWebService(string URL)
{
    HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(URL);
    objRequest.Method = "GET";
    objRequest.KeepAlive = false;
    objRequest.UseDefaultCredentials = true;

    HttpWebResponse objResponse = (HttpWebResponse)objRequest.GetResponse();
    string result = "";
    using (StreamReader sr = new StreamReader(objResponse.GetResponseStream()))
    {
        result = sr.ReadToEnd();
        sr.Close();
    }
    return result;
}

Надеюсь, это поможет.

...