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