2012-07-03 45 views
0

我試圖模擬另一個域上的用戶,以查詢該域。有些背景請參閱Accessing user info from a one way trust在另一個域上模擬用戶,單向信任

當我使用本地域用戶時,我的模擬工作正常。當我指定目標域時,也是通過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; 
    } 

任何想法? 謝謝。

+0

你是說impersonationContext爲null?我沒有看到代碼是如何工作的,因爲impersonationContext沒有在正確的範圍內聲明。使用'GetLastError'檢查從'LogonUser'返回的錯誤代碼 –

回答

0

我的問題是我發送的用戶名爲username @ domain,並指定了域名。如果用戶名包含域名,則LogonUser的域名必須爲空

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

謝謝!

相關問題