验证用户登录名和密码的问题

pro*_*mer 4 c# .net-4.0

朋友我需要制作一个软件,需要验证有效的用户登录才能使用软件.我试过这个:

bool valid = false;
 using (PrincipalContext context = new PrincipalContext(ContextType.Domain,domainname))
 {
     valid = context.ValidateCredentials( username, password );
 }
Run Code Online (Sandbox Code Playgroud)

我正在使用.net框架4.在上面的代码中如何获取计算机的域名.我试过了 SystemInformation.ComputerName,SystemInformation.UserDomainName 但我得到的错误是:

无法联系服务器

.我们可以使用c#中的任何头文件获取当前的用户名和密码吗?请回答.编辑:我使用它在我的计算机或AD中进行本地登录.

And*_*per 7

无法获取用户的密码.这可能会导致各种安全问题.如果您想验证机器已经知道的Windows登录之外的凭据,您还需要询问用户密码.

以下代码适用于具有多个域的林中.如果未在PrincipalContext构造函数中指定域,则它将连接到正在运行的计算机的域.在我的测试中,只要在林中的域之间存在适当的信任,您验证的用户是否位于不同的域中并不重要.

bool valid = false;
using (var context = new PrincipalContext(ContextType.Domain))
{
    valid = context.ValidateCredentials(username, password);
}
Run Code Online (Sandbox Code Playgroud)

你可以得到一个代表当前用户的对象,如下所示:

var user = System.Security.Principal.WindowsIdentity.GetCurrent();
Run Code Online (Sandbox Code Playgroud)

更新

如果您想要检查计算机上本地帐户数据库的凭据,则只需更改以下类型PrincipalContext:

bool valid = false;
using (var context = new PrincipalContext(ContextType.Machine))
{
    valid = context.ValidateCredentials(username, password);
}
Run Code Online (Sandbox Code Playgroud)