identidade do usuário de auditoria em .NET - O que é uma boa estratégia?
Pergunta
Eu tenho certeza que é um requisito muitos desenvolvedores têm enfrentado antes:. Negócio precisa de uma trilha de auditoria para saber quem está realizando ações em seu sistema
Independentemente de como você escolher armazenar a informação auditada, o núcleo do problema é a forma de identificar o usuário atual.
Eu quero componentes de escrita, que vão desde pequenas classes de modelo de domínio para componentes de serviço, todos os que podem seguramente ser chamados a partir de qualquer um dos aplicativos seguinte host:
- A aplicação desktop do Windows.
- website Um ASP.NET hospedado no IIS.
- Um serviço de WCF hospedado no IIS.
- Um serviço de WCF hospedado em um serviço do Windows.
Dada a variedade de tecnologias, os vários modelos de autenticação e ter que conta para o conceito de um usuário "anonymous", eu não estou claro sobre uma estratégia a utilizar para obter a identidade de quem invocou meu componente de forma centralizada .
Qual de vocês pode popular inteligentes sugerem uma abordagem para lidar com isso?
Solução
Eu geralmente requerem que os aplicativos criados Thread.CurrentPrincipal
a um principal cuja identidade representa o usuário atual. Isso pode ser feito na inicialização do aplicativo (usando WindowsIdentity.GetCurrent ()) em um cliente (WinForms ou Console) aplicativo, a partir HttpContext.Current.User ou Roles.GetCurrentUser () em um aplicativo ASP.NET ou WCF hospedado no IIS, etc .
Em seguida, nos componentes de nível mais baixo você simplesmente usar Thread.CurrentPrincipal.Identity
para auditoria.
Editar
(Em resposta ao comentário) - nota que Thread.CurrentPrincipal.Identity
não tem nada a ver com o contexto do segmento de segurança:. Esta é representado pelo WindowsIdentity e podem ser recuperadas usando WindowsIdentity.GetCurrent
e alteradas usando WindowsIdentity.Impersonate
Outras dicas
A melhor abordagem, utilizando as técnicas mais atuais, é provavelmente usar do Windows Identity Foundation .
WIF é projetado para questões de identidade do usuário pega em várias tecnologias que utilizam .NET.