Вопрос по .net, iis-6 – Не удалось войти в веб-приложение для пользователя 'NT AUTHORITY \ ANONYMOUS LOGON'

18

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

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

Когда я удаленно к веб-серверу, войдите в систему и получите доступ к сайту как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>

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

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

Просто любопытно, какой браузер вы используете для тестирования? nunespascal
Я так не думаю, потому что, когда я вхожу как MyDomain \ MyID на веб-сервер и получаю доступlocalhost/mysiteСайт работает. Когда я вошел на свой компьютер и захожу на сайт, используяwebservername/mysite Я получаю сообщение об ошибке LogonFailed для входа анонимного пользователя. Однако, когда я удаленно на веб-сервере и захожу на веб-сервер с идентификатором, который не имеет доступа к базе данных, я получаю сообщение об ошибке «Не удается открыть базу данных» & quot; MyDatabase & quot; запрашивается логином. Ошибка входа Не удалось войти в систему для пользователя "MyDomain \ MyID" (не анонимный). Кроме того, я могу подключиться к БД, используя SSMS и Windows Auth. ChadD
Это действительно звучит так, как будто у вас установлен флажок «Включить анонимный доступ», но у выбранного пользователя нет необходимых прав. Кроме того, вы пометили это тегом Server 2008, но в теле вы говорите, что используете 2003. 500 - Internal Server Error
Хорошо, я изменил Integrated Security = True на Trusted_Connection = Yes, но в статье, на которую вы ссылались, говорится, что я должен использовать режим аутентификации = Windows, что я считаю правильным. Тем не менее, я все же попытался изменить его на формы, но безуспешно. мы используем IE только для внутреннего использования, но с точки зрения Firefox. ChadD

Ваш Ответ

3   ответа
0

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

In IIS, only Basic Authentication logs users on with a security token that flows across the network to a remote SQL server. By default, other IIS security modes used in conjunction with the identity configuration element settings will not result in a token that can authenticate to a remote SQL Server.

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

32

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

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

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

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

5

<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

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

Похожие вопросы