C# 具有状态/错误代码结果的active directory身份验证

C# 具有状态/错误代码结果的active directory身份验证,c#,.net,authentication,active-directory,asp.net-mvc-4,C#,.net,Authentication,Active Directory,Asp.net Mvc 4,目前我们(我和我的公司)有一个asp.NETMVC4页面。我们希望利用一个登录页面,通过广告进行身份验证。一个要求是,如果尝试失败,我们将向用户返回一些信息 我们希望得到的信息如下: 无效用户/pw 帐户已锁定 密码过期 这是一个陌生的领域,所以我不确定有哪些.NET库可用。到目前为止,我只遇到了一些问题,但似乎我不会得到一个好结果 这可能吗?如有任何参考资料、建议或示例,将不胜感激 假设您有这样的代码 try { SearchResult result = searcher.FindO

目前我们(我和我的公司)有一个asp.NETMVC4页面。我们希望利用一个登录页面,通过广告进行身份验证。一个要求是,如果尝试失败,我们将向用户返回一些信息

我们希望得到的信息如下:

  • 无效用户/pw
  • 帐户已锁定
  • 密码过期
  • 这是一个陌生的领域,所以我不确定有哪些.NET库可用。到目前为止,我只遇到了一些问题,但似乎我不会得到一个好结果


    这可能吗?如有任何参考资料、建议或示例,将不胜感激

    假设您有这样的代码

    try
    {  
      SearchResult result = searcher.FindOne();
    }
    catch(Exception e)
    {
    // now what?
    }
    
    现在在Exception中,您可以处理LDAP异常类型,下面是所有LDAP错误的列表

    您可以根据ADSI错误值确定您得到的错误类型

    但据我所知,您应该给用户一个常见错误,比如无效凭证,因为LDAP错误很难处理

    干杯

    您可以先使用验证您的凭据。如果返回了
    false
    ,请使用static查找您的用户,如果找到,请查看是否使用锁定帐户


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

    您将如何检查无效用户/pw?将访问该网站的用户不在该域中?…如果我错了,请更正我。此解决方案将托管在云中,我们将控制该广告,我们将知道用户针对哪个域进行身份验证(例如“local.domain”)。在我的演示项目中,我们可以确定用户是否无法通过PrincipalContext.ValidateCredentials()调用进行验证。这个解决方案的问题是,除了真实/错误的结果之外,我们没有任何信息,这显然不能让您知道它失败的原因。我可能离这一点有点远了,我只是想知道是否有办法进行这种验证并获得更详细的结果。谢谢Joshua!这听起来很合理,看起来是我将选择的道路。