在C#中使用Windows用户名和密码

5

我该如何在我的C#应用程序中使用Windows存储的用户名和密码呢?我正在寻找一种方法,该方法返回成功登录的布尔状态。

bool isCredentialValid = CheckLogin(username, password);

根据布尔值,我可以显示相应的消息。 更新
class Program
{
    static void Main(string[] args)
    {
        PrincipalContext pc = new PrincipalContext(ContextType.Machine);
        Console.WriteLine("Enter username : ");
        string user = Console.ReadLine();

        Console.WriteLine("Enter password : ");
        string pass = Console.ReadLine();

        bool isValid = pc.ValidateCredentials(user, pass);

        Console.WriteLine("State : {0}",isValid);

        Console.ReadLine();
    }
}

这段代码无法正常工作。当我启用访客账户时,每次登录都显示为true,而当我禁用访客账户时,即使存在的账户也无法验证。非常感谢您的帮助。


你的意思是使用Windows登录名和密码吗? - PawanS
你确定用于测试的账户是机器账户吗?如果我尝试您提供的代码,它会成功验证。当我尝试使用已禁用的账户登录时,会抛出异常。 - comecme
@ 我正在使用相同的用户名和密码进行登录,这在 Windows 7 计算机上可以工作,但在 XP 上无法工作。 - Raj
我正在运行Windows XP SP3,一切正常。起初,我在我的开发PC上尝试了它(使用XPSP3上的VS2008),一切都很好。现在,我还构建了一个发布版本,并在另一台XPSP3机器上运行,也一切正常。我以管理员和普通用户身份运行exe,在两种情况下都可以正常工作。 - comecme
2个回答

9

请查看PrincipalContext.ValidateCredentials方法。例如,

PrincipalContext pc = new PrincipalContext(ContextType.Domain);
bool isCredentialValid = pc.ValidateCredentials(username, password);

对于本地账户,请使用ContextType.Machine。

另一种方法是使用win32 api的LogonUser函数。


3

Add using System.Security.Principal;

//for current Username full
 string str = WindowsIdentity.GetCurrent().Name;

您可以使用此用户名进行身份验证。 但是密码不同。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接