Advertisement
Guest User

Untitled

a guest
Apr 26th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.03 KB | None | 0 0
  1. using System;
  2. using System.Configuration;
  3. using System.Runtime.InteropServices;
  4. using System.Security.Principal;
  5.  
  6. namespace FrameworkComun.Util.Seguridad
  7. {
  8. /// <summary>
  9. /// Clase de Impersonalización la cual se utiliza para ejecutar procesos con un usuario distinto al autenticado en la
  10. /// PC.
  11. /// </summary>
  12. public class Impersonalizacion : IDisposable
  13. {
  14. #region Otros Métodos
  15.  
  16. /// <summary>
  17. /// Método para validar la impersonalización.
  18. /// </summary>
  19. /// <returns></returns>
  20. public bool ImpersonateValidUser()
  21. {
  22. var returnValue = LogonUser(_userName, _domain, _passWord,
  23. LogonSessionType.Interactive, LogonProvider.Default,
  24. out _tokenHandle);
  25. if (returnValue)
  26. {
  27. var newId = new WindowsIdentity(_tokenHandle);
  28. _wic = newId.Impersonate();
  29. }
  30. return returnValue;
  31. }
  32.  
  33. #endregion
  34.  
  35. #region Declaración de Variables
  36.  
  37. private readonly string _domain;
  38. private readonly string _passWord;
  39. private readonly string _userName;
  40. private IntPtr _tokenHandle = IntPtr.Zero;
  41. private WindowsImpersonationContext _wic;
  42.  
  43. [DllImport("advapi32.dll", SetLastError = true)]
  44. private static extern bool LogonUser(string principal, string authority, string password,
  45. LogonSessionType logonType, LogonProvider logonProvider, out IntPtr token);
  46.  
  47. [DllImport("kernel32.dll", SetLastError = true)]
  48. private static extern bool CloseHandle(IntPtr handle);
  49.  
  50. #endregion
  51.  
  52. #region Constructor
  53.  
  54. /// <summary>
  55. /// Contructor de clase.
  56. /// </summary>
  57. public Impersonalizacion()
  58. {
  59. _userName = ConfigurationManager.AppSettings["ServidorArchivosUsuario"];
  60. _domain = ConfigurationManager.AppSettings["ServidorArchivosDominio"];
  61. _passWord = ConfigurationManager.AppSettings["ServidorArchivosContrasenia"];
  62.  
  63. //Se encripta la contraseña en caso de estar indicado en el archivo de configuración
  64. var sFlagContrasenaEncriptada = ConfigurationManager.AppSettings["FlagContraseniaEncriptada"];
  65. if (String.IsNullOrEmpty(sFlagContrasenaEncriptada) || sFlagContrasenaEncriptada == "0") return;
  66. var oEncriptacion = new Encriptacion();
  67. _passWord = oEncriptacion.Desencriptar(_passWord);
  68. }
  69.  
  70. public void Dispose()
  71. {
  72. if (_wic != null)
  73. _wic.Undo();
  74. if (_tokenHandle != IntPtr.Zero)
  75. CloseHandle(_tokenHandle);
  76. }
  77.  
  78. #endregion
  79.  
  80. #region Enumeradores
  81.  
  82. private enum LogonProvider : uint
  83. {
  84. Default = 0 // negotiates Kerb or NTLM
  85. }
  86.  
  87. private enum LogonSessionType : uint
  88. {
  89. Interactive = 2
  90. }
  91.  
  92. #endregion
  93. }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement