如何检查当前PC用户是否是当前登录用户?

时间:2016-09-23 06:52:59

标签: c# windows

出于安全考虑,我们要检查当前的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 个答案:

答案 0 :(得分: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);
    }
}