PrincipalContext.ValidateCredentials 在 C# 中使用缓存凭据
PrincipalContext.ValidateCredentials with cached credentials in C#
我正在尝试使用域控制器对应用程序中的用户进行身份验证,代码如下:
PrincipalContext pcon = new PrincipalContext(ContextType.Domain, domain);
password_ok = pcon.ValidateCredentials(username, password);
只要域服务器在线就可以正常工作,但如果没有域服务器,则前面的代码将失败并出现 PrincipalServerDownException 异常。
我想要做的是让我的应用程序在服务器关闭时使用 windows 缓存的凭据,就像 Windows 一样:您可以使用域用户登录 windows 即使域服务器已关闭。
我可以在 C# 中执行此操作吗?
非常感谢您。
为了后代,这就是我解决问题的方法:
bool dmainNotAvailable = false;
PrincipalContext pcon = null;
try
{
pcon = new PrincipalContext(ContextType.Domain, domain);
}
catch (System.DirectoryServices.AccountManagement.PrincipalServerDownException ex)
{
domainNotAvailable = true;
try
{
pcon = new PrincipalContext(ContextType.Machine, Environment.MachineName);
}
catch (Exception ex2)
{
throw new Exception(ex2);
}
}
string realUserName = !domainNotAvailable ? username : $"{domain}\{username}";
passwordOk = pcon.ValidateCredentials(realUserName, password);
这也有效:
string userName = $"{domain}\{user}";
PrincipalContext pcon = new PrincipalContext(ContextType.Machine, Environment.MachineName);
passworkOk = pcon.ValidateCredentials(userName, password);
第二个解决方案将尝试使用缓存的凭据登录,如果没有信息则将尝试使用域控制器登录。
在这两种解决方案中,必须先将域用户添加到本地计算机才能缓存凭据。
就这些了。
我正在尝试使用域控制器对应用程序中的用户进行身份验证,代码如下:
PrincipalContext pcon = new PrincipalContext(ContextType.Domain, domain);
password_ok = pcon.ValidateCredentials(username, password);
只要域服务器在线就可以正常工作,但如果没有域服务器,则前面的代码将失败并出现 PrincipalServerDownException 异常。 我想要做的是让我的应用程序在服务器关闭时使用 windows 缓存的凭据,就像 Windows 一样:您可以使用域用户登录 windows 即使域服务器已关闭。 我可以在 C# 中执行此操作吗?
非常感谢您。
为了后代,这就是我解决问题的方法:
bool dmainNotAvailable = false;
PrincipalContext pcon = null;
try
{
pcon = new PrincipalContext(ContextType.Domain, domain);
}
catch (System.DirectoryServices.AccountManagement.PrincipalServerDownException ex)
{
domainNotAvailable = true;
try
{
pcon = new PrincipalContext(ContextType.Machine, Environment.MachineName);
}
catch (Exception ex2)
{
throw new Exception(ex2);
}
}
string realUserName = !domainNotAvailable ? username : $"{domain}\{username}";
passwordOk = pcon.ValidateCredentials(realUserName, password);
这也有效:
string userName = $"{domain}\{user}";
PrincipalContext pcon = new PrincipalContext(ContextType.Machine, Environment.MachineName);
passworkOk = pcon.ValidateCredentials(userName, password);
第二个解决方案将尝试使用缓存的凭据登录,如果没有信息则将尝试使用域控制器登录。
在这两种解决方案中,必须先将域用户添加到本地计算机才能缓存凭据。
就这些了。