活动目录和LDAP库

时间:2010-08-22 18:43:44

标签: c# .net active-directory mono ldap

我正在尝试使用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,以便我可以绑定,如果我不能作为经过身份验证的用户绑定。

感谢您提供任何帮助。

1 个答案:

答案 0 :(得分:1)

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

因此,请获取具有已知DN和密码的服务帐户。绑定为该服务帐户,进行搜索,然后绑定为您通过搜索找到的用户DN。