Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Configuration;
- using System.Runtime.InteropServices;
- using System.Security.Principal;
- namespace FrameworkComun.Util.Seguridad
- {
- /// <summary>
- /// Clase de Impersonalización la cual se utiliza para ejecutar procesos con un usuario distinto al autenticado en la
- /// PC.
- /// </summary>
- public class Impersonalizacion : IDisposable
- {
- #region Otros Métodos
- /// <summary>
- /// Método para validar la impersonalización.
- /// </summary>
- /// <returns></returns>
- public bool ImpersonateValidUser()
- {
- var returnValue = LogonUser(_userName, _domain, _passWord,
- LogonSessionType.Interactive, LogonProvider.Default,
- out _tokenHandle);
- if (returnValue)
- {
- var newId = new WindowsIdentity(_tokenHandle);
- _wic = newId.Impersonate();
- }
- return returnValue;
- }
- #endregion
- #region Declaración de Variables
- private readonly string _domain;
- private readonly string _passWord;
- private readonly string _userName;
- private IntPtr _tokenHandle = IntPtr.Zero;
- private WindowsImpersonationContext _wic;
- [DllImport("advapi32.dll", SetLastError = true)]
- private static extern bool LogonUser(string principal, string authority, string password,
- LogonSessionType logonType, LogonProvider logonProvider, out IntPtr token);
- [DllImport("kernel32.dll", SetLastError = true)]
- private static extern bool CloseHandle(IntPtr handle);
- #endregion
- #region Constructor
- /// <summary>
- /// Contructor de clase.
- /// </summary>
- public Impersonalizacion()
- {
- _userName = ConfigurationManager.AppSettings["ServidorArchivosUsuario"];
- _domain = ConfigurationManager.AppSettings["ServidorArchivosDominio"];
- _passWord = ConfigurationManager.AppSettings["ServidorArchivosContrasenia"];
- //Se encripta la contraseña en caso de estar indicado en el archivo de configuración
- var sFlagContrasenaEncriptada = ConfigurationManager.AppSettings["FlagContraseniaEncriptada"];
- if (String.IsNullOrEmpty(sFlagContrasenaEncriptada) || sFlagContrasenaEncriptada == "0") return;
- var oEncriptacion = new Encriptacion();
- _passWord = oEncriptacion.Desencriptar(_passWord);
- }
- public void Dispose()
- {
- if (_wic != null)
- _wic.Undo();
- if (_tokenHandle != IntPtr.Zero)
- CloseHandle(_tokenHandle);
- }
- #endregion
- #region Enumeradores
- private enum LogonProvider : uint
- {
- Default = 0 // negotiates Kerb or NTLM
- }
- private enum LogonSessionType : uint
- {
- Interactive = 2
- }
- #endregion
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement