我确信这是许多开发人员以前面临的要求:业务需要审计跟踪,以了解谁在他们的系统中执行操作。
无论您如何选择存储审计信息,此问题的核心是如何识别当前用户。
我想编写从小型域模型类到服务组件的组件,所有组件都可以安全地从以下任何主机应用程序中调用:
考虑到各种技术,各种身份验证模型以及必须考虑“匿名”用户的概念,我不清楚使用什么策略来获取以集中方式调用我的组件的人的身份
你们中的任何一位聪明的人都能提出解决这个问题的方法吗?
答案 0 :(得分:4)
使用最新技术的最佳方法可能是使用Windows Identity Foundation。
WIF旨在使用.NET处理多种技术中的用户身份问题。
答案 1 :(得分:2)
我通常要求应用程序将Thread.CurrentPrincipal
设置为其身份代表当前用户的主体。这可以在客户端(WinForms或控制台)应用程序中的应用程序启动(使用WindowsIdentity.GetCurrent()),在IIS中托管的ASP.NET或WCF应用程序中的HttpContext.Current.User或Roles.GetCurrentUser()中完成。
然后在较低级别的组件中,您只需使用Thread.CurrentPrincipal.Identity
进行审核。
修改强>
(回应评论) - 请注意Thread.CurrentPrincipal.Identity
与线程的安全上下文无关:这由WindowsIdentity表示,可以使用WindowsIdentity.GetCurrent
检索并使用WindowsIdentity.Impersonate
进行更改