【问题标题】:Auditing user identity in .NET - What's a good strategy?在 .NET 中审核用户身份 - 什么是好的策略?
【发布时间】:2011-01-02 03:56:06
【问题描述】:

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

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

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

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

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

各位聪明人能否提出解决此问题的方法?

【问题讨论】:

    标签: .net identity audit


    【解决方案1】:

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

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

    【讨论】:

    • WIF 看起来真的很有趣,但我发现它通过提供另一个我可能必须考虑的身份信息来源使我的问题变得复杂!
    • 除了它整合了所有内容,因此您有一个可以在所有主机应用程序中使用的源。您可以将所有内容合并到一个库中。使用 WIF 非常容易。
    • 也许我误解了 WIF 可以实现的目标。您能否提供一个示例,说明我如何使用 WIF 来允许我在 Windows 桌面应用程序和 ASP.NET 应用程序中使用理论组件?
    • 查看身份样本:microsoft.com/downloads/… 也可能是 claimsid.codeplex.com
    • 感谢您的帮助。我是否正确地认为 WIF 是一种有效的基础架构更改,用基于声明的通用系统替换特定身份源?我不确定我是否可以证明基础架构更改是为了便于审计,呵呵。
    【解决方案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进行更改。

    【讨论】:

    • 这会对线程的安全上下文有影响吗?
    猜你喜欢
    • 2017-05-20
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 2019-03-23
    • 2011-09-20
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多