.NET控制台应用程序中的Thread.CurrentPrincipal
下面是我在命令提示符下运行的一个普通控制台应用程序:.NET控制台应用程序中的Thread.CurrentPrincipal,.net,security,windows-7,.net-4.0,principal,.net,Security,Windows 7,.net 4.0,Principal,下面是我在命令提示符下运行的一个普通控制台应用程序: using System; using System.Threading; namespace Test { internal class Runner { [STAThread] static void Main(string[] args) { Console.WriteLine(Thread.CurrentPrincipal.GetType().Na
using System;
using System.Threading;
namespace Test
{
internal class Runner
{
[STAThread]
static void Main(string[] args)
{
Console.WriteLine(Thread.CurrentPrincipal.GetType().Name);
Console.WriteLine(Thread.CurrentPrincipal.Identity.Name);
}
}
}
输出为“GenericPrincipal”,标识名为空字符串。为什么运行时构造
GenericPrincipal
而不是WindowsPrincipal
?如何强制它从启动进程的安全令牌(在我的情况下是cmd.exe)构造WindowsPrincipal
?你必须告诉你的应用程序要使用什么PrincipalPolicy。你会补充说
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
使您的代码看起来像:
using System;
using System.Threading;
using System.Security.Principal;
namespace Test
{
internal class Runner
{
[STAThread]
static void Main(string[] args)
{
AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
Console.WriteLine(Thread.CurrentPrincipal.GetType().Name);
Console.WriteLine(Thread.CurrentPrincipal.Identity.Name);
}
}
}
请参见当您查询
WindowsIdentity current=WindowsIdentity.GetCurrent()时,您会得到什么代码>?它按预期返回我当前的windows标识。那么,我是否有责任构建和附加委托人?或者有一种方法可以在配置文件中指定它,就像ASP.NET或WCF应用程序中的安全设置一样?