Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.97 KB | None | 0 0
  1. <identity impersonate="true" userName="accountname" password="password" />
  2.  
  3. /// <summary>
  4. /// Clase que permite suplantar el usuario identificado que ejecuta la aplicación en la máquina servidora
  5. /// </summary>
  6. public class SuplantarUsuarioIISBL : IDisposable
  7. {
  8. #region Librerías Externas
  9. public const int LOGON32_LOGON_INTERACTIVE = 2;
  10. public const int LOGON32_PROVIDER_DEFAULT = 0;
  11.  
  12. WindowsImpersonationContext impersonationContext;
  13.  
  14. [DllImport("advapi32.dll")]
  15. public static extern int LogonUserA(String lpszUserName,
  16. String lpszDomain,
  17. String lpszPassword,
  18. int dwLogonType,
  19. int dwLogonProvider,
  20. ref IntPtr phToken);
  21. [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
  22. public static extern int DuplicateToken(IntPtr hToken,
  23. int impersonationLevel,
  24. ref IntPtr hNewToken);
  25.  
  26. [DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
  27. public static extern bool RevertToSelf();
  28.  
  29. [DllImport("kernel32.dll", CharSet = CharSet.Auto)]
  30. public static extern bool CloseHandle(IntPtr handle);
  31. #endregion
  32.  
  33. #region Métodos Públicos
  34. /// <summary>
  35. /// Inicia la suplantación de usuario por el indicado en los parámetros
  36. /// </summary>
  37. /// <param name="userName">Usuario</param>
  38. /// <param name="domain">Dominio de autenticación</param>
  39. /// <param name="password">Contraseña</param>
  40. /// <returns>True si consigue validar al usuario e impersonalizarlo</returns>
  41. public bool ImpersonateValidUser(String userName, String domain, String password)
  42. {
  43. if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(domain))
  44. {
  45. WindowsIdentity tempWindowsIdentity;
  46. IntPtr token = IntPtr.Zero;
  47. IntPtr tokenDuplicate = IntPtr.Zero;
  48.  
  49. if (RevertToSelf())
  50. {
  51. if (LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE,
  52. LOGON32_PROVIDER_DEFAULT, ref token) != 0)
  53. {
  54. if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
  55. {
  56. tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
  57. impersonationContext = tempWindowsIdentity.Impersonate();
  58. if (impersonationContext != null)
  59. {
  60. CloseHandle(token);
  61. CloseHandle(tokenDuplicate);
  62. return true;
  63. }
  64. }
  65. }
  66. }
  67. if (token != IntPtr.Zero)
  68. CloseHandle(token);
  69. if (tokenDuplicate != IntPtr.Zero)
  70. CloseHandle(tokenDuplicate);
  71. }
  72. return false;
  73. }
  74.  
  75. /// <summary>
  76. /// Devuelve la suplantación del usuario al original
  77. /// </summary>
  78. public void UndoImpersonation()
  79. {
  80. if (impersonationContext != null)
  81. {
  82. impersonationContext.Undo();
  83. impersonationContext.Dispose();
  84. impersonationContext = null;
  85. }
  86. }
  87. #endregion
  88.  
  89. #region Implementación de la interfaz
  90. /// <summary>
  91. /// Revierte la suplantación de identidad si es que se ha producido y libera todos los recursos utilizados
  92. /// </summary>
  93. public void Dispose()
  94. {
  95. UndoImpersonation();
  96. }
  97. #endregion
  98. }
  99.  
  100. // Datos del usuario a autenticar
  101. string u = ConfigurationManager.AppSettings["UsuariosAppLocalAutorizados.LecturaEscrituraDiscoUsuario"];
  102. string d = ConfigurationManager.AppSettings["UsuariosAppLocalAutorizados.LecturaEscrituraDiscoDominio"];
  103. string p = ConfigurationManager.AppSettings["UsuariosAppLocalAutorizados.LecturaEscrituraDiscoPassword"];
  104.  
  105. using (SuplantarUsuarioIISBL suplantarUsuarioBL = new SuplantarUsuarioIISBL())
  106. {
  107. if (suplantarUsuarioBL.ImpersonateValidUser(u, d, p))
  108. {
  109. // Realiza las operaciones que tenga que hacer con ese usuario
  110. }
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement