我确信这是许多开发人员以前遇到过的要求:企业需要审计跟踪来了解谁在其系统中执行操作。

无论您选择如何存储审核信息,这个问题的核心是如何识别当前用户。

我想编写组件,从小型域模型类到服务组件,所有这些都可以从以下任何主机应用程序安全地调用:

  • 一个 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 跨多种技术处理用户身份问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top