如何查看当前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
经过一番搜索,我找到了这个答案。原来域名包含在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);
}
}