我有一个简单的WPF 4.0应用程序,目前没有用户安全性的概念。我需要添加一些非常简单的基于用户名/密码的安全性,并在几个地方访问凭据,并希望利用Thread.CurrentPrincipal。我想知道简单地改变这个属性的后果是什么?它会影响.Net Framework还是以任何方式限制应用程序?或者,正如我怀疑的那样,在我在我的应用程序的其他地方使用它之前,它会没有效果吗?
答案 0 :(得分:4)
你应该好好改变Thread.CurrentPrincipal
,因为它是在.Net中使用主体的标准机制,特别是当你有一个WPF应用程序时。
在处理ThreadPool
线程时要小心 - 不要在线程池中的线程上更改它,除非在让线程死掉之前将其设置回原始值。线程池线程可以重用并且不会“重置”,因此当线程池中再次获取线程时,您在线程上设置的任何主体都将保留 - 您不知道什么可以获得此线程。
这实际上是Windows和IIS如何处理.Net的身份验证。如果你打电话
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
在您的代码中,当前登录的用户将填入Thread.CurrentPrincipal
。