tôi đã sử dụng mã mạo danh phổ biến và nó chỉ làm việc tốt, cho đến khi tôi chèn ngẫu nhiên 'dggdgsdg' ở miền - và nó làm việc dù sao ...Mạo danh một người sử dụng trong phạm vi sai không ném ngoại lệ
if (LogonUser(Username, Domain, Password, Logon32LogonInteractive, Logon32ProviderDefault, ref existingTokenHandle) &&
DuplicateToken(existingTokenHandle, (int)SecurityImpersonationLevel.SecurityDelegation, ref duplicateTokenHandle))
{
Identity = new WindowsIdentity(duplicateTokenHandle);
ImpersonationContext = Identity.Impersonate();
}
else
{
throw new Win32Exception(Marshal.GetLastWin32Error());
}
Tôi đã sử dụng một số TestUser trên miền của tôi và nó đã hoạt động. Sau đó tôi chuyển tên miền sang ngẫu nhiên 'werwerhrg' và mạo danh Người thử nghiệm trên tên miền của tôi! Tại sao? Tôi mong chờ một ngoại lệ được ném ra, tại sao nó lại hoạt động?
private const int Logon32LogonInteractive = 2;
private const int Logon32ProviderDefault = 0;
public enum SecurityImpersonationLevel
{
SecurityAnonymous = 0,
SecurityIdentification = 1,
SecurityImpersonation = 2,
SecurityDelegation = 3
}
[DllImport("advapi32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
private static extern bool LogonUser(String lpszUsername, String lpszDomain, String lpszPassword, int dwLogonType, int dwLogonProvider, ref IntPtr phToken);
[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
private extern static bool CloseHandle(IntPtr handle);
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
private static extern bool DuplicateToken(IntPtr existingTokenHandle, int securityImpersonationLevel, ref IntPtr duplicateTokenHandle);
Thông thường với xác thực tên miền, những gì tôi thấy là tên người dùng/miền được kết hợp. Vì vậy, bạn chỉ định MyDomain \ TestUser hoặc TestUser @ MyDomain. Hãy thử chỉ định tên người dùng của bạn như thế và xem điều gì sẽ xảy ra. Tôi đoán rằng máy của bạn là thành viên của miền mục tiêu và bằng cách nào đó, máy đó đang cố gắng sử dụng người dùng trên miền đó thay vì tên miền được chỉ định. –
@Tim, tôi đã thử điều đó, không may mắn. Nếu tôi chỉ định 'domain \ testUser' làm tên người dùng, tôi sẽ nhận được ngoại lệ 'tên người dùng không xác định hoặc mật khẩu không đúng'. – Rita
Đăng thông báo P/Invoke của bạn. –