0

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() を呼び出すと、偽装が停止し、ネットワーク操作に資格情報を使用できるようになりました

4

0 に答える 0