2010-08-22 82 views
2

我尝试使用Mono中的Novell.Directory.Ldap库将用户身份验证到活动目录。我知道有比下面更好的方法,但鉴于我只限于单声道,这些是我所能看到的唯一支持的例程。活动目录和LDAP库

使用.NET库,我可以使用samAccountName对用户进行身份验证。

using (DirectoryEntry de = new DirectoryEntry()) 
       { 
        de.Username = username; 
        de.Password = password; 
        de.Path = string.Format("LDAP://{0}/{1}", ADHostname, DefaultNamingContext); 
        de.AuthenticationType = AuthenticationTypes.Secure; 

        using (DirectorySearcher deSearch = new DirectorySearcher()) 
        { 
         deSearch.SearchRoot = de; 
         deSearch.PropertiesToLoad.Add("cn"); 
         deSearch.Filter = "(&(objectCatagory=person))"; 

         deSearch.FindOne(); 
        } 
       } 

但是,如果它在单声道内运行,则无效凭证将失败。使其工作的唯一方法是通过指定用户名的UPN:

de.Username =“[email protected]”;

问题是,UPN不是AD的必需属性。那么,我如何才能用他们的用户名来验证用户呢?

我看到一个关于一个POST方式做到这一点:Authenticating user using LDAP from PHP

但是,这是一个鸡和蛋的问题。如何绑定搜索用户DN,以便我可以绑定,如果我无法绑定为经过身份验证的用户开始。

谢谢你给予的任何帮助。

回答

0

通常您会为您的应用程序获取一个帐户以允许搜索其他用户DN。传统上这是使用匿名绑定完成的,但现在通常因安全原因而被阻止。

因此得到一个已知的DN和密码的服务帐户。绑定为该服务帐户,执行搜索,然后绑定为通过搜索找到的用户DN。

+0

这很有道理。我试图用尽可能少的管理员参与来做到这一点,但我认为要求服务帐户的完整DN不是什么大问题。谢谢。 – 2010-08-22 23:57:45