Regreso - y código para usuarios imitadores...
Well, tuve una agradable pausa...ahora para algún códigoM SK2 esto le permitirá 'irpersonatarMST4 un usuario Mst5 realmente útil cuando MST6 por ejemploM st7 intenta cargar un archivo a una ubicación de redMstr8como es habitualMtr9 no tengo ninguna idea en dónde lo he encontradoMrt10 si fue tuyoMt11 me aviseMSt12
using System;
using System.Web;
using System.Web.Security;
using System.Security.Principal;
using System.Runtime.InteropServices;
namespace Components.Security
{
///
/// Summary description for ImpersonateUser.
///
public class ImpersonateUser
{
public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;
WindowsImpersonationContext impersonationContext;
[DllImport("advapi32.dll", CharSet = CharSet.Auto)]
public static extern int LogonUser( string lpszUserUname,
string lpszDomain,
string lpszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken);
[DllImport("advapi32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto, SetLastError=true)]
public extern static int DuplicateToken(IntPtr hToken,
int impersonationLevel,
ref IntPtr hNewToken);
public bool impersonateValidUser(string userName, string domain, string password)
{
WindowsIdentity tempWindowsIdentity;
IntPtr token = IntPtr.Zero;
IntPtr tokenDuplicate = IntPtr.Zero;
if(LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) != 0)
{
if(DuplicateToken(token, 2, ref tokenDuplicate) != 0)
{
tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
impersonationContext = tempWindowsIdentity.Impersonate();
return (impersonationContext != null);
}
else
{
return false;
}
}
else
{
return false;
}
}
public void undoImpersonation()
{
impersonationContext.Undo();
}
}
}
Finding related posts...