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

#.net #identity #audit

#.net #идентификация #аудит

Вопрос:

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

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

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

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

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

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

Ответ №1:

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

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

Комментарии:

1. WIF выглядит действительно интересно, но я вижу, что на самом деле это усложняет мою проблему, предоставляя другой источник идентификационной информации, который мне, возможно, придется учитывать!

2. За исключением того, что она объединяет все, так что у вас есть один источник, который вы можете использовать во всех ваших хост-приложениях. Вы могли бы объединить все в одну библиотеку. очень просто с помощью WIF.

3. Возможно, я неправильно понял, чего может достичь WIF. Можете ли вы привести пример того, как я мог бы использовать WIF, чтобы позволить мне использовать теоретический компонент, скажем, в настольном приложении Windows и ASP.NET приложение?

4. Посмотрите примеры идентификации: microsoft.com/downloads /… а также потенциально claimsid.codeplex.com

5. Спасибо за вашу помощь. Прав ли я, полагая, что WIF — это фактически изменение инфраструктуры для замены конкретных источников идентификации общей системой на основе утверждений? Я не уверен, что могу оправдать изменение инфраструктуры в целях упрощения аудита, хех.

Ответ №2:

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

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

РЕДАКТИРОВАТЬ (В ответ на комментарий) — обратите внимание, что Thread.CurrentPrincipal.Identity это не имеет ничего общего с контекстом безопасности потока: он представлен WindowsIdentity и может быть получен с помощью WindowsIdentity.GetCurrent и изменен с помощью WindowsIdentity.Impersonate .

Комментарии:

1. Окажет ли это какое-либо влияние на контекст безопасности потока?