Подтвердить что ты не робот

Ошибка входа в веб-приложение для пользователя "NT AUTHORITY\ANONYMOUS LOGON"

Я вижу, что многие люди получают эту ошибку, но их ситуации все немного отличаются от моих.

У меня есть веб-приложение ASP.NET 4.0, которое работает в IIS 6.0 на сервере Windows 2003.

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

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'

На веб-сайте включен анонимный доступ, и включена проверка подлинности Windows. Веб-приложение содержит следующее:

    <authentication mode="Windows">    </authentication>
    <identity impersonate="true"/>

  <connectionStrings>
      <add name="MyConnection" connectionString="Data Source=MyDbServer;Initial Catalog=MyDatabase;Integrated Security=True"
</connectionStrings>

Мой веб-сервер работает на виртуальном сервере. Это актуально? Я предполагаю, что нет.

Обратите внимание, что если я добавлю свой домен\имя пользователя и пароль в веб-конфиг после Imersonation = TRUE, сайт будет работать.

4b9b3361

Ответ 1

Похоже, вы сталкиваетесь с тем, что называется проблемой "с двойным прыжком", где серверу не доверяют передавать учетные данные клиента в другой блок (hop 1 - это учетные данные в ящике IIS, hop 2 - из окна IIS в SQL Server).

Когда вы регистрируетесь непосредственно на сервере, второй скачок не должен выполняться, поскольку он просто передает учетные данные непосредственно с клиентского компьютера (сервера IIS в этом сценарии) непосредственно на SQL Server. Аналогично, если SQL Server жил в ящике IIS, у вас тоже не было бы этой ошибки, так как клиент мог сделать только один запрос в поле, которое могло бы передавать учетные данные как с IIS, так и с SQL Server.

Требуется выполнить несколько шагов, чтобы заставить делегацию работать, например, доверять серверам для делегирования, создавать SPN и следить за тем, чтобы другие соответствующие разрешения предоставлялись учетной записи, которую IIS использует для запуска веб-сайта. Существует техническая статья, которая поможет вам выполнить множество необходимых шагов здесь: http://blogs.technet.com/b/taraj/archive/2009/01/29/checklist-for-double-hop-issues-iis-and-sql-server.aspx

Примечание:, если вы используете NTLM, а не Kerberos (или другой делегируемый протокол), он не будет работать, так как средний сервер (сервер IIS) должен иметь токен, который может пройти по. Поскольку NTLM основывается на переговорах, это не сработает.

Ответ 2

Проблема здесь в том, что вы используете

<authentication mode="Windows">    </authentication>

Для этого необходимо, чтобы ваш браузер отправил учетные данные NTLM. Firefox не отправляет это по умолчанию.

Когда вы на сервере и используете localhost, ваш браузер отправляет ваши учетные данные для входа в Windows на сервер. Это аутентификация и предоставление доступа пользователю MyDomain\MyID.

ASP.NET олицетворяет токен, переданный ему IIS, который является либо аутентифицированным пользователем, либо анонимной учетной записью пользователя Интернета (IUSR_machinename).

Все ваши веб-запросы, которые происходят с компьютеров, которые не находятся в этом домене, будут запускаться под анонимной учетной записью. В вашем случае NT AUTHORITY\ANONYMOUS LOGON

Используется строка подключения Integrated Security=True. Это означает, что учетная запись Windows, под которой обрабатывается поток asp.net, также должна иметь доступ к базе данных. Если вы хотите передать учетные данные Windows, используемые для входа в IIS, вам нужно установить, Trusted_Connection=Yes.

Обратитесь: Как получить доступ к SQL Server с помощью встроенной безопасности Windows

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

Ответ 3

Я обнаружил, что проблема для меня заключалась в том, что в IIS я включил проверку подлинности Windows вместо базовой проверки подлинности. Как только я переключился на Basic Authentication, я смог получить доступ к SQL Server под учетной записью.

В IIS только базовая аутентификация регистрирует пользователей с маркером безопасности который протекает по сети на удаленный SQL-сервер. По умолчанию, другие режимы безопасности IIS, используемые в сочетании с идентификацией параметры элемента конфигурации не приведут к появлению маркера, который может аутентифицироваться на удаленном SQL Server.

От: http://msdn.microsoft.com/en-us/library/bsz5788z.aspx