를 포기하지 않습니다 사칭 - ... 그리고 그것은 그럼에도 불구하고 일잘못된 도메인의 사용자가 I 공통 가장 코드를 사용하고 난 임의 'dggdgsdg'를 삽입 도메인 때까지, 잘했다 예외를
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());
}
내 도메인에서 일부 TestUser를 사용하고 효과가있었습니다. 그런 다음 도메인을 임의의 넌센스 'werwerhrg'로 전환했으며 내 도메인에서 TestUser로 위장한 것입니다! 왜? 나는 던져 질 예외를 기대할 것인데, 왜 지구상에서 작동 하는가?
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);
일반적으로 도메인 인증에서는 내가 본 사용자 이름/도메인이 결합 된 것입니다. MyDomain \ TestUser 또는 TestUser @ MyDomain을 지정합니다. 그런 사용자 이름을 지정하고 어떤 일이 일어나는지보십시오. 귀하의 컴퓨터가 대상 도메인의 구성원이고 어떻게 든 지정된 도메인 대신 해당 도메인에서 사용자를 사용하려고 시도한 것 같습니다. –
@Tim, 나는 그것을 시험했다, 행운이 없다. username으로 'domain \ testUser'를 지정하면 '알 수없는 사용자 이름 또는 잘못된 비밀번호'예외가 발생합니다. – Rita
P/Invoke 선언을 게시하십시오. –