我正在尝试使用Mono中的Novell.Directory.Ldap库对用户进行身份验证。我知道有比下面更好的方法,但鉴于我只局限于Mono,这些是我能看到的唯一支持的例程。
使用.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 =“foo@my.domain.com”;
问题是,UPN不是AD的必需属性。那么我如何只用他们的用户名验证用户?
我看到有关此方法的帖子:Authenticating user using LDAP from PHP
但是,这是鸡和蛋的问题。我如何绑定以搜索用户DN,以便我可以绑定,如果我不能作为经过身份验证的用户绑定。
感谢您提供任何帮助。
答案 0 :(得分:1)
通常您会获得应用程序的帐户,以允许搜索其他用户DN。传统上这是使用匿名绑定完成的,但现在通常由于安全原因而被阻止。
因此,请获取具有已知DN和密码的服务帐户。绑定为该服务帐户,进行搜索,然后绑定为您通过搜索找到的用户DN。