ADFS无法validation特定的用户 – 抛出ADAccountLookupException

注意 – 我已经解决了这个问题,但是在这个问题上我没有看到有关网上的详细介绍,所以我会自己去提问和回答。

我运行了一个authentication为SMTPRelayUser的服务,该服务在95%的时间内启动了失败的ADFS身份validation。 令人费解的是,这个用户偶尔会成功validation并发送所有排队的邮件。 在ADFS事件查看器日志中,我看到两个错误 – 事件300和事件413.事件ID 300没有提供有用的信息,但413通知我一个奇怪的例外。

Microsoft.IdentityServer.Service.AccountPolicy.ADAccountLookupException: Exception of type 'Microsoft.IdentityServer.Service.AccountPolicy.ADAccountLookupException' was thrown. 

这是怎么回事?

我检查了跨域控制器的这个帐户的复制,可以看到没有理由,这应该是失败的。 我打开ADFSdebugging日志logging,并尝试再次login。 这次我得到了非常明确的警告,在ADFS跟踪debugging日志中处理了ADAccountLookupException

事件ID 53: AccountLockoutPolicy.IsAccountThrottled:系统无法读取用户[email protected]的错误密码计数

在检查ADFS服务器群所喜欢的DC上的SMTPRelayUser的badPwdCount AD属性之后,我发现它确实没有设置

在这一点上,我记得我早已启用了ADFS 2012 R2 Extranet Lockout Protection ,并且正好与login问题的发生一致。 显然,Extranet Lockout Protectionfunction中存在一个错误,如果badPwdCount未设置, 则会引发exception。 我禁用了Extranet Lockout Protectionfunction,login工作完美。

那么为什么我的authentication工作有5%的时间? badPwdCount不跨域控制器复制。 每个区议会保持自己的计数。 偶尔,ADFS实际上会咨询一个设置了badPwdCount值并且authentication成功的DC。

如果您在ADFS中使用Extranet Lockout Protection特性,故事的道德要小心。 我自己现在只是暂时禁用它。