2010-12-12 17 views
13

Ecco un'applicazione banale console che ho eseguito nel prompt dei comandi:Thread.CurrentPrincipal in .NET applicazione console

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); 
     } 
    } 
} 

L'uscita è 'GenericPrincipal' e stringa vuota come nome di identità. Perché il tempo di esecuzione costruisce GenericPrincipal anziché WindowsPrincipal? Come posso costringerlo a costruire WindowsPrincipal dal token di sicurezza del processo di avvio (cmd.exe nel mio caso)?

+0

Che cosa si ottiene quando si esegue una query 'corrente WindowsIdentity = WindowsIdentity.GetCurrent();' ?? –

+1

Restituisce la mia identità Windows attuale come mi aspetto. Quindi è mia responsabilità costruire e legare il preside? O c'è un modo per specificarlo nel file di configurazione proprio come l'impostazione di sicurezza in ASP.NET o nell'applicazione WCF? – UserControl

risposta

29

Devi dire alla tua app cosa deve usare PrincipalPolicy. Si potrebbe aggiungere

AppDomain.CurrentDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal); 

rendere il vostro look codice come:

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); 
     } 
    } 
} 

Vedere http://msdn.microsoft.com/en-us/library/system.appdomain.setprincipalpolicy.aspx

Problemi correlati