【发布时间】:2014-10-14 17:01:45
【问题描述】:
我正在为离线应用程序实施 AD 身份验证。
我的原始代码执行以下操作:
var validAuth = false;
using (var context = new System.DirectoryServices.AccountManagement.PrincipalContext(System.DirectoryServices.AccountManagement.ContextType.Domain))
{
validAuth = context.ValidateCredentials(_viewModel.Username, txtPassword.Password);
}
但是,在测试期间,我们注意到这导致帐户锁定的次数是 AD 组策略尝试次数的一半 - 因此,如果策略设置为在锁定前 4 次尝试,用户将被锁定在 2 次。
我在谷歌上搜索并找到了这篇文章 on MSDN 和 TL;DR 是这样的:
听起来如果使用UPN格式(Domain@sAMAccountName),错误密码计数会增加2,但是如果使用sAMAccountName格式(Domain\sAMAccountName),则每次计数都会增加1。
鉴于此,我将代码更改为:
var validAuth = false;
using (var context = new System.DirectoryServices.AccountManagement.PrincipalContext(System.DirectoryServices.AccountManagement.ContextType.Domain))
{
var usernameToAuth = string.Format("{0}\\{1}", Environment.UserDomainName, _viewModel.Username);
validAuth = context.ValidateCredentials(usernameToAuth, txtPassword.Password);
}
但是无论输入如何,现在都无法进行身份验证。如果我将其更改为使用 user@domain 的旧式 UPN 格式,它可以很好地进行身份验证 - 但显然这会用完两个身份验证请求。
MSDN 帖子说使用 sAMAccountName 格式作为解决方法,但我正在努力解决如何做到这一点。我的原始代码也没有明确使用旧的 UPN 格式 - 我只是将用户名直接传递给 ValidateCredentials 方法(在任何地方都看不到 @ 符号)所以这个方法首先使用旧的 UPN 方法吗?
请提供任何建议 - 我并不特别希望我们的用户可能有一半的错误登录尝试。
【问题讨论】:
标签: c# .net authentication active-directory windows-authentication