在 .NET 中审核用户身份 - 什么是好的策略?
题
我确信这是许多开发人员以前遇到过的要求:企业需要审计跟踪来了解谁在其系统中执行操作。
无论您选择如何存储审核信息,这个问题的核心是如何识别当前用户。
我想编写组件,从小型域模型类到服务组件,所有这些都可以从以下任何主机应用程序安全地调用:
- 一个 Windows 桌面应用程序。
- 托管在 IIS 中的 ASP.NET 网站。
- 托管在 IIS 中的 WCF 服务。
- 托管在 Windows 服务中的 WCF 服务。
考虑到技术的范围、各种身份验证模型以及必须考虑“匿名”用户的概念,我不清楚用于获取以集中方式调用我的组件的人的身份的策略。
你们中的任何聪明人都可以提出解决这个问题的方法吗?
解决方案
我通常会要求应用程序设置 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
.
其他提示
使用最新技术的最佳方法可能是使用 Windows 身份基础.
WIF 旨在使用 .NET 跨多种技术处理用户身份问题。
不隶属于 StackOverflow