ASP.NET> SqlServer; доверие и делегирование - PullRequest
2 голосов
/ 14 июля 2009

у нас есть система, в которой клиенту нужна встроенная проверка подлинности Windows. Это приложение ASP.NET 3.5, подключающееся к Sql Server 2005. Веб-сервером является Server 2003 R2 SP2. Сервер БД - это Server 2003 SP2 (не R2).

На сервере БД я запустил следующий скрипт

exec sp_grantlogin 'myDomain\myUserGroup'
USE myDbName
exec sp_grantdbaccess 'myDomain\myUserGroup'

У меня 3 пользователя в группе пользователей Windows 'myDomain \ myUserGroup' прямо сейчас. Учетные записи всех трех пользователей помечены как доверенные для делегирования. Учетная запись веб-сервера в AD помечается как доверенная для делегирования.

Веб-приложение помечено как использующее проверку подлинности Windows (все остальные отключены). Файл web.config имеет следующие строки:

<authentication mode="Windows" ></authentication>
<identity impersonate="true" />
<authorization>
    <deny users="?"/>
</authorization>

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

System.Data.SqlClient.SqlException: 
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

Моя строка соединения строится из Sql ConnectionStringBuilder, сконструированного так:

ConnectionStringBuilder.DataSource = "MYDBSERVER"
ConnectionStringBuilder.InitialCatalog = "MYDBCATALOG"
ConnectionStringBuilder.IntegratedSecurity = True

Если я HARD CODE один из разрешенных имитировать учетные записи в строке web.config <identity />, это работает. Но если я снимаю учетную запись с жестким кодом и пытаюсь передать идентификационную информацию с компьютера клиента. Я получаю ошибку.

Так что мне кажется, что у меня не настроено что-то правильно для сценария многократного интегрированного входа, но я не могу понять, что именно.

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 14 июля 2009

ASP-машина аутентифицировала пользователя, подключающегося к IIS через NTLM / Kerberos. Проверка подлинности гарантируется контроллером домена, который попросил исходный пользовательский процесс (IE) предоставить секрет, который гарантирует его личность: его пароль он набрал, когда вошел в систему. На самом деле аутентификация выполняется не вовлеченными процессами, а локальным органом безопасности (LSA, aka. Lsass.exe) на каждой задействованной машине. Поскольку LSA на машине ASP знает, что с аутентификацией все в порядке, он позволит олицетворению удаленного пользователя получить доступ ко всему, на что у него есть права доступа, под контролем упомянутого LSA (другими словами, ко всему на локальной машине ASP ).

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

Обходной путь - это то, что называется «ограниченное делегирование». Через ограниченное делегирование контроллер домена вмешивается в согласование между LSA машины SQL и LSA машины ASP и говорит: «С машиной ASP все в порядке, я за него ручаюсь». Поэтому машинный LSA SQL доверяет аутентификации и аутентифицирует оригинального, выдаваемого себя за пользователя.

Технические подробности о том, как настроить ограниченное делегирование, описаны в Как: использовать переход по протоколу и ограниченное делегирование в ASP.NET 2.0

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

2 голосов
/ 14 июля 2009

Если вы используете проверку подлинности Windows, то олицетворение не проходит мимо самого процесса ASP.NET. Здесь у вас есть два варианта - переключиться на базовую аутентификацию, где проходит идентификация, или, если вы работаете на Win2003 или более поздней версии, вы можете использовать Kerberos и некоторую хакерскую для олицетворения при подключении

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...