Не удалось войти в веб-приложение для пользователя 'NT AUTHORITY\ANONYMOUS LOGON'
Я вижу, что многие люди получают эту ошибку, но все их ситуации немного отличаются от моей.
У меня есть веб-приложение ASP.NET 4.0, которое работает в IIS 6.0 на Windows 2003 Server.
Когда я удаленно подключаюсь к веб-серверу и вхожу в систему и получаю доступ к сайту как локальный, а не по имени машины, веб-приложение работает нормально. Однако, когда я получаю доступ к веб-сайту с другого клиентского компьютера, я получаю следующую ошибку:
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, сайт будет работать.
3 ответа
Похоже, вы сталкиваетесь с проблемой "двойного прыжка", когда серверу не доверяют передавать учетные данные клиента в другой блок (переход 1 - это учетные данные в блок IIS, переход 2 - из окна IIS на сервер SQL).
Когда вы вошли прямо на сервер, второй переход не требуется, поскольку он просто передает учетные данные непосредственно с клиентского компьютера (в данном сценарии сервер 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
Примечание: если вы используете NTLM, а не Kerberos (или другой делегируемый протокол), он не будет работать, поскольку промежуточному серверу (серверу IIS) необходим токен, который он может передавать. Поскольку NTLM основан на переговорах, он не будет работать.
Проблема в том, что вы используете
<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.
Я предлагаю вам взглянуть на проверку подлинности с помощью форм, если вы планируете предоставлять этот веб-сервис в Интернете или хотите сделать его доступным для пользователей, которые не принадлежат вашему домену.
Я обнаружил, что проблема для меня заключалась в том, что в IIS была включена проверка подлинности Windows вместо обычной проверки подлинности. Как только я переключился на обычную аутентификацию, я смог получить доступ к SQL Server под учетной записью, вошедшей в систему.
В IIS только базовая аутентификация регистрирует пользователей с токеном безопасности, который передается по сети на удаленный сервер SQL. По умолчанию другие режимы безопасности IIS, используемые в сочетании с настройками элемента конфигурации идентификации, не приводят к токену, который может проходить проверку подлинности на удаленном SQL Server.