0

そのドメインにクエリを実行する目的で、別のドメインのユーザーになりすまそうとしています。背景については、一方向の信頼からユーザー情報にアクセスするを参照してください。

ローカルドメインユーザーを使用している場合、偽装は正しく機能します。LDAPSポート636を介しているターゲットドメインを指定すると、機能しません。私のなりすましはnullを返します。

私のなりすましコード

public static WindowsImpersonationContext ImpersonateUser(ConnectionCredentials user)
    {
        WindowsIdentity tempWindowsIdentity;
        IntPtr token = IntPtr.Zero;
        IntPtr tokenDuplicate = IntPtr.Zero;

        if (RevertToSelf())
        {
            if (LogonUser(user.UserName, user.Domain, user.Password, LOGON32_LOGON_INTERACTIVE,
                LOGON32_PROVIDER_DEFAULT, ref token) != 0)
            {
                if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
                {
                    tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
                    impersonationContext = tempWindowsIdentity.Impersonate();
                    if (impersonationContext != null)
                    {
                        CloseHandle(token);
                        CloseHandle(tokenDuplicate);
                        return impersonationContext;
                    }
                }
            }
        }
        if (token != IntPtr.Zero)
            CloseHandle(token);
        if (tokenDuplicate != IntPtr.Zero)
            CloseHandle(tokenDuplicate);
        return impersonationContext;
    }

何か案は?ありがとう。

4

1 に答える 1

0

私の問題は、ユーザー名を username@domain として送信し、ドメイン名を指定していたことです。ユーザー名にドメイン名が含まれる場合、LogonUser のドメイン名は null である必要があります

if (LogonUser(user.UserName, null, user.Password, LOGON32_LOGON_INTERACTIVE,
                LOGON32_PROVIDER_DEFAULT, ref token) != 0)

ありがとう!

于 2012-07-03T17:52:37.427 に答える