我正在尝试对用户进行身份验证。通过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?
答案 0 :(得分:0)
将ContextOptions
添加到方法ValidateCredentials
。
有多种选择,具体取决于ContextType
。
点击此处:https://msdn.microsoft.com/en-us/library/bb300969(v=vs.110).aspx