Reputation: 79
I'm trying to get Thread.CurrentPrincipal.Identity.Name
and it seems to be returning an empty string.
I've tried running as administrator and as a different user and it's still doing it. If I go to the Claims
on the object, the issuer was LOCAL AUTHORITY
. Shouldn't this then return the user I'm logged in as?
public string GetCurrentUser()
{
var principal = Thread.CurrentPrincipal.Identity.Name;
//Thread.CurrentPrincipal.Identity
return principal;
}
Upvotes: 1
Views: 830
Reputation: 36
CurrentPrincipal property uses internal GetThreadPrincipal
method of AppDomain type to build IPrincipal
object by default.
internal IPrincipal GetThreadPrincipal()
{
IPrincipal principal;
if (this._DefaultPrincipal == null)
{
switch (this._PrincipalPolicy)
{
case PrincipalPolicy.UnauthenticatedPrincipal:
principal = (IPrincipal) new GenericPrincipal((IIdentity) new GenericIdentity("", ""), new string[1]
{
""
});
break;
case PrincipalPolicy.NoPrincipal:
principal = (IPrincipal) null;
break;
case PrincipalPolicy.WindowsPrincipal:
principal = (IPrincipal) new WindowsPrincipal(WindowsIdentity.GetCurrent());
break;
default:
principal = (IPrincipal) null;
break;
}
}
else
principal = this._DefaultPrincipal;
return principal;
}
GetThreadPrincipal method uses PrincipalPolicy which is UnauthenticatedPrincipal
by default.
You can change default behavior. For example you can use SetPrincipalPolicy method of AppDomain
with PrincipalPolicy.WindowsPrincipal
to get a Windows user
var appDomain = AppDomain.CurrentDomain;
appDomain.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
var principal = Thread.CurrentPrincipal;
var user = principal.Identity.Name;
Upvotes: 1