2016-09-23 111 views
-1

出於安全原因,我們希望檢查當前PC用戶是否是實際登錄的用戶。要做到這一點,我們希望用戶重新輸入密碼並檢查域名的憑證。我們怎麼能做到這一點?如何檢查當前PC用戶是否是當前登錄的用戶?

SOFAR我們試過這樣:

public static Boolean Authenticate(String password) 
{ 
    String user = WindowsIdentity.GetCurrent().Name; 

    using (PrincipalContext PrincipalContext = new PrincipalContext(ContextType.Domain, Environment.UserDomainName)) 
    { 
     return PrincipalContext.ValidateCredentials(user, password); 
    } 
} 

卻得到了一個System.DirectoryServices.Protocols.LdapException,留下Environment.UserDomainName關閉也會觸發此異常。

我們也嘗試:

public static Boolean Authenticate(String password) 
{ 
    String user = WindowsIdentity.GetCurrent().Name; 

    using (PrincipalContext PrincipalContext = new PrincipalContext(ContextType.Machine)) 
    { 
     return PrincipalContext.ValidateCredentials(user, password); 
    } 
} 

但這返回true上的任何密碼。

回答

1

經過一番搜索,我遇到了this answer。發現域名包含在WindowsIdentity.GetCurrent().Name中。在documentation的評論中發現。

給予這個作爲工作液:

public static Boolean Authenticate(String password) 
{ 
    String user = WindowsIdentity.GetCurrent().Name; //Should be: DomainName\UserName 
    String[] DomainAndUserName = user.Split(new Char[] { '\\' }, 2); 

    if (DomainAndUserName.Length != 2) { return false; } // No DomainName ==> Wrong network; 

    using (PrincipalContext PrincipalContext = new PrincipalContext(ContextType.Domain, DomainAndUserName[0])) 
    { 
      return PrincipalContext.ValidateCredentials(DomainAndUserName[1], password); 
    } 
} 
相關問題