Аудит личности пользователя в .NET - Какая хорошая стратегия? - PullRequest
2 голосов
/ 06 января 2010

Я уверен, что это требование, с которым многие разработчики сталкивались ранее: бизнес нуждается в контрольном журнале, чтобы знать, кто выполняет действия в своей системе.

Независимо от того, как вы решили хранить проверенную информацию, ядроЭта проблема заключается в том, как идентифицировать текущего пользователя.

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

  • Настольное приложение Windows.
  • Веб-сайт ASP.NET, размещенный в IIS.
  • Служба WCF, размещенная в IIS.
  • Служба WCF, размещенная вСлужба Windows.

Учитывая широкий спектр технологий, различные модели аутентификации и необходимость учитывать концепцию «анонимного» пользователя, мне неясно, какую стратегию использовать для получения идентификатора.того, кто бы ни вызывал мой компонент централизованно.

Может ли кто-нибудь из вас, умный народ, предложить подход для решения этой проблемы?

Ответы [ 2 ]

4 голосов
/ 06 января 2010

Наилучшим подходом, использующим самые современные методы, является, вероятно, использование Windows Identity Foundation .

WIF предназначен для решения проблем идентификации пользователей в различных технологиях с использованием .NET.

2 голосов
/ 06 января 2010

Я бы обычно требовал, чтобы приложения устанавливали Thread.CurrentPrincipal на принципала, личность которого представляет текущего пользователя. Это можно сделать при запуске приложения (с помощью WindowsIdentity.GetCurrent ()) в клиентском (WinForms или Console) приложении, из HttpContext.Current.User или Roles.GetCurrentUser () в приложении ASP.NET или WCF, размещенном в IIS, и т. Д. .

Затем в компонентах нижнего уровня вы просто используете Thread.CurrentPrincipal.Identity для аудита.

EDIT (В ответ на комментарий) - обратите внимание, что Thread.CurrentPrincipal.Identity не имеет ничего общего с контекстом безопасности потока: это представлено WindowsIdentity и может быть получено с помощью WindowsIdentity.GetCurrent и изменено с помощью WindowsIdentity.Impersonate.

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