Веб-приложение ASP.NET не может использовать несколько олицетворений для аутентификации
У меня есть приложение asp.net (использует проверку подлинности Windows для доступа), которое (по указанию группы безопасности) должно подключаться к удаленному SQL Server 2005 с помощью встроенной системы безопасности. Из-за того, что это удаленный сервер SQL, мне нужно было выдать себя за пользовательская учетная запись (олицетворение исходного абонента не будет работать) через:
<identity impersonate = "true" userName="domainname\user" password="password" />
Это работает нормально. Проблема в том, что мое приложение также подключается к серверу SSRS для отчетов о потребностях с помощью элемента управления ReportViewer. Сервер отчетов находится на отдельном сервере, и группа безопасности требует, чтобы при всех вызовах на этот сервер использовалась учетная запись исходного окна в целях аудита. Кажется, мой единственный вариант - попытаться разделить мое приложение на папки и использовать тег "location" в моем файле web.config и использовать отдельные теги идентификации. Такие как:
<location path="Reporting">
<system.web>
<identity impersonate = "true"/>
</system.web>
</location>
Примечание: имя пользователя и пароль не указаны, что означает, что он должен выдавать себя за оригинального абонента.
Однако, чтобы сделать вещи еще более сложными, мое приложение является приложением Masterpage/content page. Главная страница делает вызовы SQL для заполнения меню и тому подобное. Суть в том, что двойной путь подражания не работает. Я готов поднять руки вверх и заявить, что это невозможно. Если бы я мог сделать так, чтобы приложение имитировало оригинального абонента, которое удовлетворяло бы мои потребности аудита SSRS, но при этом устанавливало соединения с сервером SQL в качестве учетной записи пользовательского домена. Я не могу использовать аутентификацию SQL: не разрешено, хотя это решило бы эту проблему.
2 ответа
Вы пробовали следующую настройку:
Установите олицетворение на истину. Это необходимо для аутентификации в приложении и для доступа к SSRS для использования текущего пользователя, вошедшего в систему.
Используйте одну строку подключения к SSRS, для которой для Integrated Security установлено значение true, чтобы олицетворенный пользователь проходил напрямую.
Используйте вторую строку подключения, в которой пользовательское имя пользователя и пароль жестко запрограммированы в строке подключения. Вы можете зашифровать раздел строки подключения файла web.config, чтобы он не был виден человеческим глазам, но инфраструктура автоматически расшифрует это на лету при создании подключения.
У меня похожая ситуация (нужна конкретная учетная запись для извлечения определенных данных, но общее олицетворение для остальных функциональных возможностей службы), и эта настройка работает.
РЕДАКТИРОВАТЬ: Общий синтаксис для шифрования вашего web.config из командной строки:
aspnet_regiis -pef "connectionStrings" [PhysicalPathToApplication] -prov "DataProtectionConfigurationProvider"
Шифрование выполняется для каждого компьютера в отдельности, поэтому шифрование необходимо выполнять на конкретном сервере. Вы можете получить больше документации по этому вопросу, если это необходимо.
Вы должны иметь возможность включать и выключать олицетворение, чтобы вы могли вернуться к использованию учетной записи по умолчанию, на которой работает сайт. Я должен буду проверить, это было время, так как я сделал это.
Это выглядит как начало того, как это сделать:
System.Security.Principal.WindowsImpersonationContext impersonationContext;
impersonationContext =
((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate();
//Insert your code that runs under the security context of the authenticating user here.
impersonationContext.Undo();
По сути, вы просто выдаваете себя за соответствующего пользователя для нужных вам звонков, а затем "отменяете" контекст и выключаете его. После этого он возвращается к пользователю по умолчанию.
Вот ссылка на класс идентификации Windows:
http://msdn.microsoft.com/en-us/library/system.security.principal.windowsidentity.aspx