活动目录和LDAP库
问题描述:
我尝试使用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,以便我可以绑定,如果我无法绑定为经过身份验证的用户开始。
谢谢你给予的任何帮助。
答
通常您会为您的应用程序获取一个帐户以允许搜索其他用户DN。传统上这是使用匿名绑定完成的,但现在通常因安全原因而被阻止。
因此得到一个已知的DN和密码的服务帐户。绑定为该服务帐户,执行搜索,然后绑定为通过搜索找到的用户DN。
这很有道理。我试图用尽可能少的管理员参与来做到这一点,但我认为要求服务帐户的完整DN不是什么大问题。谢谢。 – 2010-08-22 23:57:45