为什么PrincipalContext ValidateCredentials在给出错误的凭据时抛出异常?

时间:2017-12-07 17:50:28

标签: c#

我正在尝试对用户进行身份验证。通过PrincipalContext进行身份验证可以正常使用正确的用户名和密码,但在使用不正确的凭据进行测试时,ValidateCredentials会抛出System.Exception而不是返回false。该异常仅表示“用户名或密码不正确”。堆栈跟踪如下:

   at System.DirectoryServices.AccountManagement.UnsafeNativeMethods.IADs.Get(String bstrName)
   at System.DirectoryServices.AccountManagement.CredentialValidator.BindSam(String target, String userName, String password)
   at System.DirectoryServices.AccountManagement.PrincipalContext.ValidateCredentials(String userName, String password)
   at hcv.Core.AuthenticationSystem.Services.WindowsAuthenticationService.<>c__DisplayClass3_0.<AuthenticateAsync>b__0()
   at System.Threading.Tasks.Task`1.InnerInvoke()
   at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)" string

代码很简单:

using (var pc = new PrincipalContext(_contextType, _domain))
{
    var isAuthenticated = pc.ValidateCredentials(username, password);
    return isAuthenticated;
}

我目前正在通过捕获错误,检查消息并返回false(如果它是不正确的用户名或密码消息并且如果没有重新抛出)来解决这个问题,但这感觉很麻烦。

有没有人知道为什么抛出异常而不是简单地为无效凭证返回false?

1 个答案:

答案 0 :(得分:0)

ContextOptions添加到方法ValidateCredentials

有多种选择,具体取决于ContextType

点击此处:https://msdn.microsoft.com/en-us/library/bb300969(v=vs.110).aspx