Аудит идентификации пользователя в .NET - Какая хорошая стратегия?

StackOverflow https://stackoverflow.com/questions/2014933

  •  19-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

Обычно я бы потребовал, чтобы приложения устанавливали Thread.CurrentPrincipal участнику, идентификатор которого представляет текущего пользователя.Это можно сделать при запуске приложения (с помощью WindowsIdentity.GetCurrent()) в клиентском приложении (WinForms или консоли) из HttpContext.Current.Пользователь или роли.getCurrentUser() в приложении ASP.NET или WCF, размещенном в IIS, и т.д.

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top