'Ejecutar la aplicación de Visual Studio obtiene los
derechos de lectura y escritura de archivos, por lo que el código está en
ejecución, pero desde el navegador no está recibiendo los derechos adecuados
para por ejemplo guardar un archivo por lo que debe proporcionar / conceder los
derechos para hacerlo correctamente.
Private impersonateValitedUser As Boolean
= False
Dim LOGON32_LOGON_INTERACTIVE As Integer
= 2
Dim LOGON32_PROVIDER_DEFAULT As
Integer = 0
#Region "Impersonation"
Dim impersonationContext As WindowsImpersonationContext
Declare Function
LogonUserA Lib
"advapi32.dll"
(ByVal
lpszUsername As String,
ByVal lpszDomain As String,
ByVal lpszPassword As String,
ByVal dwLogonType As Integer,
ByVal dwLogonProvider As Integer,
ByRef phToken As IntPtr)
As Integer
Declare Auto
Function DuplicateToken Lib "advapi32.dll" (
ByVal ExistingTokenHandle As IntPtr,
ByVal ImpersonationLevel As Integer,
ByRef DuplicateTokenHandle As IntPtr) As Integer
Declare Auto
Function RevertToSelf Lib "advapi32.dll" () As Long
Declare Auto
Function CloseHandle Lib "kernel32.dll" (ByVal
handle As IntPtr) As Long
Private Function
impersonateValidUser(ByVal
userName As String,
ByVal domain As String, ByVal password As
String) As Boolean
Dim tempWindowsIdentity As WindowsIdentity
Dim token As IntPtr = IntPtr.Zero
Dim tokenDuplicate As IntPtr
= IntPtr.Zero
impersonateValidUser = False
If RevertToSelf() Then
If LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT, token) <> 0 Then
If DuplicateToken(token, 2, tokenDuplicate) <> 0 Then
tempWindowsIdentity = New WindowsIdentity(tokenDuplicate)
impersonationContext =
tempWindowsIdentity.Impersonate()
If Not
impersonationContext Is
Nothing Then
impersonateValidUser = True
impersonateValitedUser
= True
End If
End If
End If
End If
If Not
tokenDuplicate.Equals(IntPtr.Zero) Then
CloseHandle(tokenDuplicate)
End If
If Not
token.Equals(IntPtr.Zero)
Then
CloseHandle(token)
End If
End Function
Private Sub
undoImpersonation()
impersonationContext.Undo()
End Sub
#End Region
Public Sub
MySub()
If impersonateValidUser("Username", "Domain", "Password") Then
'aquí el código que se ejecuta bajo el
contexto de seguridad de un usuario específico --> …
'… <-- span=""> -->
undoImpersonation()
Else
End If
End Sub
No hay comentarios:
Publicar un comentario