I am using C# and .Net Framework 4.
I am looking for a foolproof method to get the login id of the currently logged in windows user that is not susceptible to impersonation or hacking. I am looking for this in the form of: DOMAINNAME\USERNAME
e.g. SOMEDOMAIN\JohnDoe
Currently the best I have is:
var identity = System.Security.Principal.WindowsIdentity.GetCurrent();
var currentLoginId = identity.Name;
Is this open to impersonation (outside of someone knowing both the username and password) and if so is there a better way of doing this?
There can be at least four different identities involved at this point:
In your code you’re getting (1). This is normally fine, and is usually the same as (2).
To retrieve (2), you could:
WindowsIdentity.GetCurrentto get the impersonated identityRevertToSelffunctionWindowsIdentity.GetCurrentto get the underlying process identity(2) and (3) will be the same unless you’ve written unmanaged code that changes the process identity. As @Daniel points out, (3) and (4) could legitimately be different in the presence of the Windows “run as” command.