IIS でホストされているサービスを呼び出すために別のユーザーになりすますための winform があります。非常に基本的なテキストボックスからユーザー資格情報を取得しています。ログオンタイプ「新しい資格情報」を使用して偽装トークンを取得するために「ログオンユーザー」をピンボークしています:http://msdn.microsoft.com/en-us/library/windows/desktop/aa378184(v=vs.85).aspx(グループポリシーで許可されていないため、ログオンタイプ「インタラクティブ」は使用できません)。
これは正常に機能し、偽装された ID を使用して IIS サービスを呼び出すことができます。これは、ネットワーク資格情報の新しいセットがあるためです。 winapi の「reverttoself」機能を使用したい)。
元のユーザー ネットワーク資格情報に戻すにはどうすればよいですか? これが私のなりすまし機能です:
Friend Shared Function GetContext(ByVal username As String, ByVal domain As String, ByVal password As SecureString) As WindowsImpersonationContext
Dim token As IntPtr = IntPtr.Zero
Dim passwordPtr As IntPtr = IntPtr.Zero
Dim idContext As WindowsIdentity
Try
passwordPtr = Marshal.SecureStringToGlobalAllocUnicode(password)
If NativeMethods.LogonUser( username,
domain,
passwordPtr,
CInt(NativeMethods.LogonSessionType.NewCredentials),
CInt(NativeMethods.LogonProvider.Default),
token) = False Then
Throw New ComponentModel.Win32Exception(Marshal.GetLastWin32Error())
End If
idContext = New WindowsIdentity(token)
Return idContext.Impersonate()
Catch ex As Exception
Throw
Finally
Marshal.ZeroFreeGlobalAllocUnicode(passwordPtr)
If Not IntPtr.op_Equality(token, IntPtr.Zero) Then
NativeMethods.CloseHandle(token)
End If
End Try
End Function
したがって、この関数からの windowsimpersonationcontext を使用した後、「undo()」を呼び出すだけでは、元のユーザーのネットワーク資格情報に戻りません。この新しい認証情報をクリアするにはどうすればよいですか?
何か案は?
編集
それを理解して、LOGON32_LOGON_NETWORK_CLEARTEXT LogonType を使用すると、目的の動作が得られます。関数によって返されたコンテキストで Undo() を呼び出すと、偽装が停止し、ネットワーク操作に資格情報を使用できるようになりました