Вызовы олицетворения ASP.NET и доверенных подключений SQL Server

Я работаю над страницей ASP.NET, в коде которой мы олицетворяем запрашивающего пользователя. Мы используем следующий код, чтобы начать выдавать себя за другое лицо.

Dim impersonationContext As System.Security.Principal.WindowsImpersonationContext
Dim currentWindowsIdentity As System.Security.Principal.WindowsIdentity
currentWindowsIdentity = CType(User.Identity, System.Security.Principal.WindowsIdentity)
impersonationContext = currentWindowsIdentity.Impersonate()

После этого мы проверили, что приложение работает в правильном контексте, вызвав:

System.Security.Principal.WindowsIdentity.GetCurrent().Name

Это возвращает правильную личность пользователя, и доступ к файлам и другие элементы, похоже, используют его учетную запись. Однако при использовании класса SqlHelper блока приложения данных приложения Microsoft для вызова базы данных с использованием аутентификации доверенного соединения происходит сбой для пользователя «NT AUTHORITY \ ANONYMOUS LOGON».

Мы можем повторно проверить после сбоя, что текущая учетная запись по-прежнему является нашей желаемой учетной записью, а НЕ учетной записью АНОНИМНОГО ВХОДА.

Есть ли у кого-нибудь идеи, почему это так? Или, более конкретно, как мы можем это обойти?

Изменить. Дополнительная информация о том, как работают звонки с этих страниц.

Мы делаем безличный вызов со страницы .aspx.

После олицетворения мы вызываем сборку «бизнес-логики», на которую делается ссылка.

Мы знаем, что идентичность контекста здесь по-прежнему верна.

После этого сборка «бизнес-логики» вызывает другую сборку, которая фактически выполняет вызов доверенного соединения. Мы не можем изменить эту сборку «доступа к данным», исключение проверки подлинности также сообщается этой сборкой.


person Mitchel Sellers    schedule 19.12.2008    source источник


Ответы (2)


Я думаю, что @John Sonmez прав, вы столкнулись с проблемой Double Hop. Олицетворение - это только половина дела, вам также нужно взглянуть на делегирование (при условии, что ваша сеть использует аутентификацию Kerberos). Приведенные ниже статьи оказались наиболее полезными, поскольку помогли мне решить ту же проблему.

Олицетворение и делегирование

делегирование ASP.NET

person Paul Nearney    schedule 19.12.2008
comment
Это была проблема, потом мы обнаружили, что делегирование не может работать в нашей среде ..... да ладно! - person Mitchel Sellers; 23.12.2008
comment
у вас такая же проблема ... что вы имеете в виду под делегированием не может работать? - person eych; 27.07.2012

Я знаю, что раньше я использовал олицетворение в ASP.NET (используя C # и доступ к файловой системе), и мне было интересно, пытались ли вы обернуть логику, которая включает currentWindowsIdentity.Impersonate () с помощью 'Использование / End Using '(чтобы явно определить контекст безопасности для блока кода).

Итак, это будет выглядеть так:

Using impersonationContext = currentWindowsIdentity.Impersonate() 
' Logic here 
End Using
person Dan Esparza    schedule 19.12.2008
comment
нет оператора using, но он находится внутри try catch, а оператор finally имеет вызов для отмены - person Mitchel Sellers; 20.12.2008