es exactamente el accesstoken que tiene que usar. para obtenerlo debe llamar al método LogonUser:
oops no me di cuenta de que solo tengo el código de VB.net aquí. imaginarlo en C#;) aquí en c#
declaración de método externo:
Private Declare Auto Function LogonUser 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 Boolean
y la ejecución:
_Token = New IntPtr(0)
Const LOGON32_PROVIDER_DEFAULT As Integer = 0
'This parameter causes LogonUser to create a primary token.
Const LOGON32_LOGON_INTERACTIVE As Integer = 2
Const LOGON32_LOGON_NEWCREDENTIALS As Integer = 9
_Token = IntPtr.Zero
' Call LogonUser to obtain a handle to an access token.
Dim returnValue As Boolean = LogonUser(_User, _Domain, _Password, LOGON32_LOGON_NEWCREDENTIALS, LOGON32_PROVIDER_DEFAULT, _Token)
If False = returnValue Then
Dim ret As Integer = Marshal.GetLastWin32Error()
Console.WriteLine("LogonUser failed with error code : {0}", ret)
Throw New System.ComponentModel.Win32Exception(ret)
End If
_Identity = New WindowsIdentity(_Token)
_Context = _Identity.Impersonate()
¿Hay una manera de hacerlo sin la contraseña? Tengo acceso a él ya que estoy creando justo antes de la suplantación, solo pensé en preguntar. – Doug
Supongo que se debe llamar a 'CloseHandle' (como se menciona en [documentos para' Usuario de inicio de sesión'] (https://msdn.microsoft.com/en-us/library/windows/desktop/aa378184 (v = vs.85) .aspx)) para el 'userToken' después del bloque de uso. ¿O esto es llamado de alguna manera por 'WindowsIdentity'? – CodeFox
Hola Si esto es la aplicación ASP.NET, ¿cuál es el alcance de esto? ¿Debo llamar a esta función en cada página? –