2016-09-23 126 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); 
    } 
} 
相关问题