.Net改变Thread.CurrentPrincipal的分歧

时间:2010-05-27 20:26:28

标签: .net security

我有一个简单的WPF 4.0应用程序,目前没有用户安全性的概念。我需要添加一些非常简单的基于用户名/密码的安全性,并在几个地方访问凭据,并希望利用Thread.CurrentPrincipal。我想知道简单地改变这个属性的后果是什么?它会影响.Net Framework还是以任何方式限制应用程序?或者,正如我怀疑的那样,在我在我的应用程序的其他地方使用它之前,它会没有效果吗?

1 个答案:

答案 0 :(得分:4)

你应该好好改变Thread.CurrentPrincipal,因为它是在.Net中使用主体的标准机制,特别是当你有一个WPF应用程序时。

在处理ThreadPool线程时要小心 - 不要在线程池中的线程上更改它,除非在让线程死掉之前将其设置回原始值。线程池线程可以重用并且不会“重置”,因此当线程池中再次获取线程时,您在线程上设置的任何主体都将保留 - 您不知道什么可以获得此线程。

这实际上是Windows和IIS如何处理.Net的身份验证。如果你打电话

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);

在您的代码中,当前登录的用户将填入Thread.CurrentPrincipal