2012-09-27 14 views
4

目前我们(我和我的公司)有一个asp.net mvc4页面。我们希望利用通过AD进行身份验证的登录页面。一个要求是不成功的尝试,我们给用户一些信息。活动目录身份验证与状态/错误代码结果

我们希望有会是这样的信息:

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

这是不熟悉的领域,所以我”我不确定什么.NET库可用。到目前为止,我只是遇到了System.DirectoryServices,但它似乎并不会超出布尔的结果。

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

+0

你会如何检查无效的用户/密码?将访问该网站的用户不在该域中?...如果我错了,请纠正我。 – RL89

+0

此解决方案将托管在云中,我们将控制AD,我们将知道用户正在验证哪个域(例如“local.domain”)。在我的演示项目中,我们可以肯定地告诉用户是否无法通过PrincipalContext.ValidateCredentials()调用进行验证。这个解决方案的问题是,除了True/False结果之外,我们没有任何信息,这显然不会告诉您为什么它不成功。我可能会选择这个,我只是在寻找是否有办法进行这种认证和获得更详细结果的建议。 –

回答

4

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

您可能需要自己扩展UserPrincipal以查看密码是否已过期,但我没有看到直接的属性/方法。您可以扩展它以直接访问userAccountControl属性,并检查是否设置了0x800000位,即PasswordExpired。这里是more information on the userAccountControl values

+0

谢谢约书亚!这听起来很合理,而且看起来是我会选择的路径。 –

0

假设你有这样的代码

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

现在异常,您可以处理LDAP异常类型,这是所有LDAP错误的的名单。

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

您可以识别的ADSI错误值你得到的错误类型的基础上。

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

干杯。