asp.net через Kerberos встроенную проверку подлинности Windows к серверу SQL - PullRequest
3 голосов
/ 06 августа 2009

Пожалуйста, кто-нибудь может ПОЖАЛУЙСТА дать простой и понятный способ включить ASP.NET> Kerberos> Sql Server?

У нас есть clientMachine> webServer> databaseServer. Клиент настаивает на том, что сайт должен получить Windows-вход в систему и не запрашивать, следовательно, необходима Kerberos и встроенная проверка подлинности. Он также ДОЛЖЕН выдавать себя за пользователя на сервере БД, вызывая двойной переход.

Наш домен является доменом Windows 2003, что, насколько я могу судить, означает, что Kerberos включен. И на компьютере, присоединенном к домену, при входе в систему kerbtray показывает мне, что у меня есть множество билетов, так что, очевидно, он работает.

Учетные записи компьютеров веб-сервера и сервера базы данных в AD являются «доверенными для делегирования».
Учетные записи пользователей AD, которые должны иметь доступ к системе, являются «доверенными для делегирования».
Когда все заработает, я добавлю больше пользователей, а пока это два.

Экземпляр Sql Server работает под LocalSystem на сервере базы данных, что, насколько я могу судить по сети, означает, что ему вообще не требуется связываться с этими именами SPN.

Тем не менее, когда я пытаюсь войти в систему с любым из пользователей, я получаю

Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'. 

указывает на сбой двойного прыжка. Этому способствует тот факт, что в журнале приложений на сервере базы данных есть множество записей из «MSSQL», говорящих об одном и том же.

Я действительно не могу поверить, насколько это сложно ... я имею в виду, что IIS, SQL и Windows - все это Microsoft, разве они не могут говорить лучше ???

Итак, в итоге, у меня есть

  • домен Kerberos,
  • БД и веб-сервер оба доверены для делегирования
  • пользователей, которым доверено делегирование
  • пользователей в группе AD
  • Группа AD в качестве логина в sql (и пользователя в db)
  • IIS с отключенным анонимным, встроенным, базовым и отключенным дайджестом
  • IE с включенной поддержкой

Ответы [ 3 ]

7 голосов
/ 06 августа 2009

Загрузите Устранение неполадок делегации Kerberos . Это спасатель.
На странице 17 вы найдете Контрольный список Active Directory . Следуйте контрольному списку шаг за шагом.
На странице 30 вы найдете Контрольный список клиентских приложений . Проверяйте контрольный список шаг за шагом.
На странице 35 находится Контрольный список среднего уровня . Проверяйте это шаг за шагом.
На странице 48 находится контрольный список Back End . Проверьте это шаг за шагом.

Если у вас все еще есть проблемы, документ содержит подробный список инструментов устранения неполадок (kerbtray, klist, ldifde и т. Д.), Подробное объяснение того, как включить регистрацию и аудит ошибок аутентификации в журнале системных событий, подробное объяснение всех ошибок коды в записях журнала событий из аудита аутентификации и т. д. и т. п.

Как только вы поймете , что не так, это будет намного легче исправить.

5 голосов
/ 07 августа 2009

Ответ, в конечном счете, был в SPN.

Эта система была настроена на нашем тестовом сайте, который называется test.ourcompany.com, поэтому мне нужно было добавить новый SPN для этой ссылки. Так в дополнение к следующему:

HTTP/server 
HTTP/server.ourdomain.com

Мне также нужно было добавить дополнительный для:

HTTP/test.ourcompany.com

Боже, какая битва! По крайней мере, все кончено! :)
Спасибо за помощь, ребята!

0 голосов
/ 06 августа 2009

То, что вы описываете, должно работать без проблем.

Строка подключения должна выглядеть следующим образом:

<add name="IntegratedAuthConnectionString" connectionString=
 "Data Source=DATABASEINSTANCE;Integrated Security=True"
 providerName="System.Data.SqlClient"/>

Ваш web.config также должен указывать аутентификацию Windows

<authentication mode="Windows"/>

Создайте тестовую страницу, которая выводит все данные из коллекции Request.ServerVariables и убедитесь, что вы видите аутентифицированное имя пользователя и домен. Нечто похожее на код ниже

foreach (string s in Request.ServerVariables)
{
    Response.Write(s + ": " + Request.ServerVariables[s] + "<br />");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...