目前我们(我和我的公司)有一个asp.net mvc4页面。我们希望利用通过AD进行身份验证的登录页面。一个要求是不成功的尝试,我们给用户一些信息。活动目录身份验证与状态/错误代码结果
我们希望有会是这样的信息:
- 无效的用户/密码
- 帐户被锁定
- 密码过期
这是不熟悉的领域,所以我”我不确定什么.NET库可用。到目前为止,我只是遇到了System.DirectoryServices,但它似乎并不会超出布尔的结果。
这可能吗?任何参考,建议或例子将不胜感激!
目前我们(我和我的公司)有一个asp.net mvc4页面。我们希望利用通过AD进行身份验证的登录页面。一个要求是不成功的尝试,我们给用户一些信息。活动目录身份验证与状态/错误代码结果
我们希望有会是这样的信息:
这是不熟悉的领域,所以我”我不确定什么.NET库可用。到目前为止,我只是遇到了System.DirectoryServices,但它似乎并不会超出布尔的结果。
这可能吗?任何参考,建议或例子将不胜感激!
您可以先使用PrincipalContext.ValidateCredentials验证您的凭证。如果返回false
,则使用静态UserPrincipal.FindByIdentity找到您的用户,如果找到,则查看是否使用IsAccountLockedOut()锁定帐户。
您可能需要自己扩展UserPrincipal以查看密码是否已过期,但我没有看到直接的属性/方法。您可以扩展它以直接访问userAccountControl
属性,并检查是否设置了0x800000
位,即PasswordExpired。这里是more information on the userAccountControl values。
谢谢约书亚!这听起来很合理,而且看起来是我会选择的路径。 –
假设你有这样的代码
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错误很难处理。
干杯。
你会如何检查无效的用户/密码?将访问该网站的用户不在该域中?...如果我错了,请纠正我。 – RL89
此解决方案将托管在云中,我们将控制AD,我们将知道用户正在验证哪个域(例如“local.domain”)。在我的演示项目中,我们可以肯定地告诉用户是否无法通过PrincipalContext.ValidateCredentials()调用进行验证。这个解决方案的问题是,除了True/False结果之外,我们没有任何信息,这显然不会告诉您为什么它不成功。我可能会选择这个,我只是在寻找是否有办法进行这种认证和获得更详细结果的建议。 –