使用状态/错误代码结果的活动目录身份验证

4

目前我们(我和我的公司)有一个asp.net mvc4页面。我们希望利用一个通过AD认证的登录页面。其中一个要求是在认证失败时向用户返回一些信息。

我们想要的信息可能是:

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

这是一个不熟悉的领域,所以我不确定有哪些.NET库可用。到目前为止,我只找到了System.DirectoryServices,但它似乎只能返回一个bool值。

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


你如何检查无效的用户名/密码?访问网站的用户不在该域中?...如果我错了,请纠正我。 - RL89
此解决方案将托管在云中,我们将控制AD,我们将知道用户正在进行身份验证的域(例如“local.domain”)。 在我的演示项目中,我们肯定可以通过PrincipalContext.ValidateCredentials()调用告诉用户是否无法验证。 这种解决方案的问题是,除了True / False结果之外,我们将没有任何其他信息,这显然不会为您提供任何失败原因的知识。 我可能完全错了,我只是想寻求建议,看是否有一种方法进行此类身份验证并获得更详细的结果。 - Luke G
2个回答

4
您可以使用 PrincipalContext.ValidateCredentials 首先验证您的凭据。如果返回值为 false,则使用静态 UserPrincipal.FindByIdentity 查找您的用户,然后查看账户是否已锁定使用 IsAccountLockedOut()
您可能需要自己扩展 UserPrincipal 来查看密码是否过期,我没有看到直接的属性/方法。您可以扩展它以直接访问 userAccountControl 属性,并检查位 0x800000 是否设置,即 PasswordExpired。这里有关于 userAccountControl 值的更多信息

谢谢Joshua!这听起来非常合理,看起来这将是我选择的路径。 - Luke G

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错误难以处理。

Cheers.!!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接