как использовать другой идентификатор для выполнения моего кода в asp.net при условии, что у меня есть имя пользователя и пароль

Я создаю небольшое веб-приложение для управления. В нем мне нужно подключиться к различным серверам, используя разные учетные записи через wmi.

Я хочу сказать свое приложение: теперь вы запускаете user1, делайте это и это. И тогда я хочу сказать это: теперь вы пользователь2, делайте это и это.

Наверное, я не так понят с моим вопросом, я реорганизую его.

Вам нужно будет написать отдельный fragment кода .Net (некоторые голосовые вызовы тоже), чтобы выполнить олицетворение вашего пользователя, а затем вызвать ваш код, олицетворяя этого пользователя. Затем вы можете восстановить учетную запись пользователя:

Извинения за образец VB, но это будет легко переносить на C #.


Пример VB

Public Class UserImpersonation 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  _ Private Shared Function FormatMessage(ByVal dwFlags As Integer, ByRef lpSource As IntPtr, _ ByVal dwMessageId As Integer, ByVal dwLanguageId As Integer, ByRef lpBuffer As [String], _ ByVal nSize As Integer, ByRef Arguments As IntPtr) As Integer End Function Private Declare Auto Function CloseHandle Lib "kernel32.dll" (ByVal handle As IntPtr) As Boolean Private Declare Auto Function DuplicateToken Lib "advapi32.dll" (ByVal ExistingTokenHandle As IntPtr, _ ByVal SECURITY_IMPERSONATION_LEVEL As Integer, _ ByRef DuplicateTokenHandle As IntPtr) As Boolean  _ Public Shared Function ImpersonateUser(ByVal strDomain As String, ByVal strUserid As String, ByVal strPassword As String) As WindowsImpersonationContext Dim tokenHandle As New IntPtr(0) Dim dupeTokenHandle As New IntPtr(0) Try ' Get the user token for the specified user, domain, and password using the ' unmanaged LogonUser method. ' The local machine name can be used for the domain name to impersonate a user on this machine. Const LOGON32_PROVIDER_DEFAULT As Integer = 0 'This parameter causes LogonUser to create a primary token. Const LOGON32_LOGON_INTERACTIVE As Integer = 2 tokenHandle = IntPtr.Zero ' Call LogonUser to obtain a handle to an access token. Dim returnValue As Boolean = LogonUser(strUserid, strDomain, strPassword, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, tokenHandle) If returnValue = False Then Dim ret As Integer = Marshal.GetLastWin32Error() Throw New System.ComponentModel.Win32Exception(ret) Else ' Use the token handle returned by LogonUser. Dim newId As New WindowsIdentity(tokenHandle) Dim ImpersonatedUser As WindowsImpersonationContext = newId.Impersonate() Return ImpersonatedUser End If Catch ex As Exception Console.WriteLine("UserImpersonation.impersonateUser Exception Occurred: " + ex.Message) Return Nothing End Try ' Free the tokens. If Not System.IntPtr.op_Equality(tokenHandle, IntPtr.Zero) Then CloseHandle(tokenHandle) End If End Function Public Shared Function UndoImpersonate(ByVal WIC As WindowsImpersonationContext) As Boolean Try ' Stop impersonating the user. WIC.Undo() Return True Catch ex As Exception Console.WriteLine(("Exception occurred. " + ex.Message)) Return False End Try End Function End Class