Windows凭证验证

时间:2014-01-08 02:23:15

标签: c# credentials

我需要一些C#代码来验证Windows凭据,该帐户可能是本地帐户或域帐户。

请提供一些有关如何操作的建议。

1 个答案:

答案 0 :(得分:5)

取决于您使用的.NET版本。如果您使用的是包含System.DirectoryServices.AccountManagement的.NET版本,则可以执行以下操作:

 bool valid = false;

 using (PrincipalContext context = new PrincipalContext(ContextType.Domain))
 {
     valid = context.ValidateCredentials(username, password);
 }

将ContextType.Domain更改为本地计算机的ContextType.Machine。您还可以尝试通过查询Active Directory或尝试使用类似的方式强制登录本地系统来模拟用户。不过我会推荐上述方法。

public bool IsAuthenticated(string server, string username, string password)
{
    bool authenticated = false;

    try
    {
        DirectoryEntry entry = new DirectoryEntry(server, username, password);
        object nativeObject = entry.NativeObject;
        authenticated = true;
    }
    catch (DirectoryServicesCOMException cex)
    {
        //not authenticated; reason why is in cex
    }
    catch (Exception ex)
    {
        //not authenticated due to some other exception [this is optional]
    }

    return authenticated;
}