Олицетворение ASP.NET и вызовы доверенного соединения SQL Server - PullRequest
0 голосов
/ 20 декабря 2008

Я работаю над страницей 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.

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

Мы знаем, что контекстная идентичность здесь все еще верна.

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

Ответы [ 2 ]

3 голосов
/ 20 декабря 2008

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

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

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

0 голосов
/ 20 декабря 2008

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

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

Using impersonationContext = currentWindowsIdentity.Impersonate() 
' Logic here 
End Using
...