我需要一些C#代码来验证Windows凭据,该帐户可能是本地帐户或域帐户。
请提供一些有关如何操作的建议。
答案 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;
}