2

我确信这是许多开发人员以前面临的要求:业务需要审计跟踪来了解谁在他们的系统中执行操作。

不管你选择如何存储被审计的信息,这个问题的核心是如何识别当前用户。

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

  • Windows 桌面应用程序。
  • 托管在 IIS 中的 ASP.NET 网站。
  • 托管在 IIS 中的 WCF 服务。
  • 托管在 Windows 服务中的 WCF 服务。

鉴于技术的范围、各种身份验证模型以及必须考虑“匿名”用户的概念,我不清楚使用何种策略来获取以集中方式调用我的组件的人的身份。

你们中的任何一个聪明人都可以提出解决这个问题的方法吗?

4

2 回答 2

4

使用最新技术的最佳方法可能是使用Windows Identity Foundation

WIF 旨在使用 .NET 跨多种技术处理用户身份问题。

于 2010-01-06T17:45:34.983 回答
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.

于 2010-01-06T20:54:24.767 回答