使用Active Directory验证密码

时间:2012-10-30 08:38:35

标签: c# .net active-directory

我想检查loginpassword与AD信息的匹配。我尝试使用这段coode,但我在FindOne上遇到异常(用户名或密码错误......但它们是正确的)。我知道有PrincipalContext解决方案,但我需要能够设置服务器(Production,Dev,...)

谢谢,

var Ad = new DirectoryEntry("LDAP://server1.domain.com", username, password);

var AdSearcher = new DirectorySearcher(Ad);
AdSearcher.Filter = String.Format("(anr={0})", username);
AdSearcher.PropertiesToLoad.Add("sAMAccountName");
AdSearcher.PropertiesToLoad.Add("displayName");

var AdSearcherResults = AdSearcher.FindOne();
var userFullName = AdSearcherResults.Properties["displayName"][0].ToString();
var userUid = AdSearcherResults.Properties["sAMAccountName"][0].ToString();

if (Membership.ValidateUser(username, userUid))
    return true;
return false;   

Update1 我也试过了:

using (var context = new PrincipalContext(ContextType.Domain, "server1.domain.com"))
{
    var isValid = context.ValidateCredentials(username, password);
} 

我的计算机没有在域上连接,但应该是我认为的工作。

1 个答案:

答案 0 :(得分:0)

我的Active Directory身份验证代码。

    public DirectoryEntry connDirectory(string usr, string pwd)
    {

        string ip = iniMan.IniRead("LDAP", "adres");
        DirectoryEntry oDE;
        oDE = new DirectoryEntry(ip, usr, pwd, AuthenticationTypes.Secure);
        return oDE;
    }
    public bool AD_Login(string kullanici_adi, string sifre)
    {
        try
        {
            DirectoryEntry entLogin = connDirectory(kullanici_adi, sifre);
            object loginObj = entLogin.NativeObject;
            return true;
        }
        catch (Exception ex)
        {
            return false;
        }

    }
    void TestMetod(){
     if(AD_Login("ozan","ozan"){
      //ok
     }
    }