Thread.CurrentPrincipal.Identity.Name è vuoto da WPF

MODIFICARE

La semplice domanda è: come posso ottenere Thread.CurrentPrincipal.Identity.Name per avere l’accesso utente corrente in WPF?

FINE MODIFICA

Sto provando a chiamare un metodo esistente (non in alcun tipo di servizio, solo un metodo in un POCO) che recupera l’utente corrente con:

Thread.CurrentPrincipal.Identity.Name

Questo codice è stato scritto da qualcun altro e (presumibilmente) funziona con il suo progetto ASP.NET MVC. Sto provando a chiamare questo stesso metodo da WPF e Nome è vuoto.

C’è qualcosa che posso fare per questo?

Impostare Thread.CurrentPrincipal su new WindowsPrincipal(WindowsIdentity.GetCurrent()) . Avrai quindi in modo affidabile il principale corrente per la durata di quel thread. Dovrai ripetere questo su qualsiasi altro thread che giri.

EDIT: dovrei anche menzionare i metodi SetThreadPrincipal e SetPrincipalPolicy su AppDomain. Questo dovrebbe essere fatto all’avvio dell’applicazione, e i nuovi thread creati ora vedranno questo principale per impostazione predefinita. Se questo metodo non viene chiamato, ogni nuovo thread inizierà nuovamente con GenericPrincipal.

Provare

 System.Security.Principal.WindowsIdentity.GetCurrent().Name; 

o:

 Environment.UserName 

Questo ha funzionato anche per me:

 Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent());