目前我们(我自己和我的公司)有一个 asp.net mvc4 页面。我们希望使用通过 AD 进行身份验证的登录页面。一个要求是在尝试不成功的情况下,我们将一些信息返回给用户。
我们希望获得的信息类似于:
- 无效的用户/密码
- 帐户被锁定
- 密码已过期
这是一个陌生的领域,所以我不确定有哪些 .NET 库可用。到目前为止,我只遇到了System.DirectoryServices,但似乎我不会得到超出布尔值的结果。
这可能吗?任何参考、建议或示例将不胜感激!
目前我们(我自己和我的公司)有一个 asp.net mvc4 页面。我们希望使用通过 AD 进行身份验证的登录页面。一个要求是在尝试不成功的情况下,我们将一些信息返回给用户。
我们希望获得的信息类似于:
这是一个陌生的领域,所以我不确定有哪些 .NET 库可用。到目前为止,我只遇到了System.DirectoryServices,但似乎我不会得到超出布尔值的结果。
这可能吗?任何参考、建议或示例将不胜感激!
您可以使用PrincipalContext.ValidateCredentials首先验证您的凭据。如果false
返回,请使用静态UserPrincipal.FindByIdentity查找您的用户,如果找到,请查看该帐户是否使用IsAccountLockedOut()锁定。
您可能需要自己扩展 UserPrincipal 以查看密码是否已过期,我没有看到直接的属性/方法。您可以扩展它以直接访问userAccountControl
属性并检查是否0x800000
设置了位,即 PasswordExpired。这是有关 userAccountControl 值的更多信息。
假设你有这样的代码
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 错误很难处理。
干杯。!!