4

目前我们(我自己和我的公司)有一个 asp.net mvc4 页面。我们希望使用通过 AD 进行身份验证的登录页面。一个要求是在尝试不成功的情况下,我们将一些信息返回给用户。

我们希望获得的信息类似于:

  1. 无效的用户/密码
  2. 帐户被锁定
  3. 密码已过期

这是一个陌生的领域,所以我不确定有哪些 .NET 库可用。到目前为止,我只遇到了System.DirectoryServices,但似乎我不会得到超出布尔值的结果。

这可能吗?任何参考、建议或示例将不胜感激!

4

2 回答 2

4

您可以使用PrincipalContext.ValidateCredentials首先验证您的凭据。如果false返回,请使用静态UserPrincipal.FindByIdentity查找您的用户,如果找到,请查看该帐户是否使用IsAccountLockedOut()锁定。

您可能需要自己扩展 UserPrincipal 以查看密码是否已过期,我没有看到直接的属性/方法。您可以扩展它以直接访问userAccountControl属性并检查是否0x800000设置了位,即 PasswordExpired。这是有关 userAccountControl 值的更多信息

于 2012-09-28T15:41:49.560 回答
0

假设你有这样的代码

try
{  
  SearchResult result = searcher.FindOne();
}
catch(Exception e)
{
// now what?
}

现在在 Exception 中您可以处理 LDAP 异常类型,这里是所有 LDAP 错误的列表。

http://msdn.microsoft.com/en-us/library/aa746530(v=vs.85).aspx

您可以根据ADSI 错误值识别您遇到的错误类型。

但根据我的说法,你应该给用户一个常见的错误,比如无效的凭据,因为 LDAP 错误很难处理。

干杯。!!

于 2012-09-28T13:41:42.633 回答