如何查看当前PC用户是否为当前登录用户

本文关键字:用户 登录 是否 PC 何查看 | 更新日期: 2023-09-27 18:08:30

出于安全原因,我们要检查当前PC用户是否是实际登录的用户。为此,我们希望用户重新输入密码并通过域检查其凭据。我们怎样才能做到这一点呢?

到目前为止,我们尝试了:

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

如何查看当前PC用户是否为当前登录用户

经过一番搜索,我找到了这个答案。原来域名包含在WindowsIdentity.GetCurrent().Name中。在文档注释下找到。

给出一个可行的解决方案:

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);
    }
}