WindowsImpersonationContext & Impersonate() not found in ASP.Core WindowsImpersonationContext & Impersonate() not found in ASP.Core asp.net asp.net

WindowsImpersonationContext & Impersonate() not found in ASP.Core


Necromancing.
Like this:

using System.Security.Principal;namespace regeditor{    public class WindowsLogin : System.IDisposable    {        protected const int LOGON32_PROVIDER_DEFAULT = 0;        protected const int LOGON32_LOGON_INTERACTIVE = 2;        public WindowsIdentity Identity = null;        private System.IntPtr m_accessToken;        [System.Runtime.InteropServices.DllImport("advapi32.dll", SetLastError = true)]        private static extern bool LogonUser(string lpszUsername, string lpszDomain,        string lpszPassword, int dwLogonType, int dwLogonProvider, ref System.IntPtr phToken);        [System.Runtime.InteropServices.DllImport("kernel32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)]        private extern static bool CloseHandle(System.IntPtr handle);        // AccessToken ==> this.Identity.AccessToken        //public Microsoft.Win32.SafeHandles.SafeAccessTokenHandle AT        //{        //    get        //    {        //        var at = new Microsoft.Win32.SafeHandles.SafeAccessTokenHandle(this.m_accessToken);        //        return at;        //    }        //}        public WindowsLogin()        {            this.Identity = WindowsIdentity.GetCurrent();        }        public WindowsLogin(string username, string domain, string password)        {            Login(username, domain, password);        }        public void Login(string username, string domain, string password)        {            if (this.Identity != null)            {                this.Identity.Dispose();                this.Identity = null;            }            try            {                this.m_accessToken = new System.IntPtr(0);                Logout();                this.m_accessToken = System.IntPtr.Zero;                bool logonSuccessfull = LogonUser(                   username,                   domain,                   password,                   LOGON32_LOGON_INTERACTIVE,                   LOGON32_PROVIDER_DEFAULT,                   ref this.m_accessToken);                if (!logonSuccessfull)                {                    int error = System.Runtime.InteropServices.Marshal.GetLastWin32Error();                    throw new System.ComponentModel.Win32Exception(error);                }                Identity = new WindowsIdentity(this.m_accessToken);            }            catch            {                throw;            }        } // End Sub Login         public void Logout()        {            if (this.m_accessToken != System.IntPtr.Zero)                CloseHandle(m_accessToken);            this.m_accessToken = System.IntPtr.Zero;            if (this.Identity != null)            {                this.Identity.Dispose();                this.Identity = null;            }        } // End Sub Logout         void System.IDisposable.Dispose()        {            Logout();        } // End Sub Dispose     } // End Class WindowsLogin } // End Namespace 

Usage:

*// WindowsIdentity user = (WindowsIdentity)context.User.Identity;// using (WindowsIdentity user = WindowsIdentity.GetCurrent())using (WindowsLogin wi = new WindowsLogin("Administrator", System.Environment.MachineName, "TOP_SECRET")){    #if NET461    using (user.Impersonate())    #else    WindowsIdentity.RunImpersonated(wi.Identity.AccessToken, () =>    #endif    {        WindowsIdentity useri = WindowsIdentity.GetCurrent();        System.Console.WriteLine(useri.Name);    }    #if !NET461    );    #endif}*


As @Tratcher mentioned you can use the RunImpersonated in .netstandard. The following code sniped is taken from here.

    var user = (WindowsIdentity)context.User.Identity;#if NET461    using (user.Impersonate())#else    WindowsIdentity.RunImpersonated(user.AccessToken, () =>#endif    {        // var useri = WindowsIdentity.GetCurrent();    }#if !NET461    );#endif