Active Directory的LDAP路径

时间:2011-03-13 09:42:38

标签: asp.net-mvc-3 active-directory ldap

我正在使用MVC在ASP.net 4.0中开发Web应用程序。

在我的应用程序中,我使用Exchnage server 2007发送电子邮件。

我从交换服务器获取全局地址列表。

现在的问题是如何使用UserName,Password和domain name获取Active Directory的LDAP路径。

目前我正在做的是我正在使用DirectoryEntry的对象n为我事先知道的服务器传递LDAP路径。

但是,如果其他未知的exchnage服务器的凭证正在使用呢?

2 个答案:

答案 0 :(得分:3)

由于您使用的是.NET 3.5及更高版本,因此您应该查看System.DirectoryServices.AccountManagement(S.DS.AM)命名空间。在这里阅读所有相关内容:

Managing Directory Security Principals in the .NET Framework 3.5

基本上,您可以定义域上下文并轻松在AD中查找用户和/或组:

// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// find yourself:
UserPrincipal myself = UserPrincipal.Current;

// find user by name
UserPrincipal someoneElse = UserPrincipal.FindByIdentity("John Doe");

// get user's LDAP path
if(someoneElse != null)
{
   // the DN (DistinguishedName) is typically your full LDAP path to the object
   // just prepend it with LDAP:// and you should be able to bind to it
   string userDN = someoneElse.DistinguishedName;

   // if you need the full LDAP path, you need to look at the underlying
   // DirectoryEntry object from System.DirectoryServices:
   string ldapPath = (someoneElse.GetUnderlyingObject() as DirectoryEntry).Path;
}

新的S.DS.AM使得在AD中使用用户和群组变得非常容易。因此,如果您从Exchange获得一些信息,例如用户的名字,你应该能够很容易地在AD中找到相应的UserPrincipal,并从那里开始,做你需要做的任何事情。

答案 1 :(得分:0)

我不熟悉.net。但我可以帮助解决问题

我猜您正在寻找用户的fdn

域控制器具有名称为

的dns SRV记录
       _ldap._tcp.<DNSDomainName>
       _ldap._tcp.example.com

在这种情况下,它会告诉你运行AD的服务器的fqdn。 (基本上是ldap服务)。假设你到了,

       host.example.com

然后在主机'host.example.com'上从dc = example,dc = com执行子树ldap搜索。 它会像,

    ldapsearch -h host.example.com -b "dc=example,dc=com" -s sub samaccountname=username

这将获得用户的ldap路径(ldap dn)。如果AD配置为不响应任何匿名请求,则还有另一个问题。

但是,如果您正在寻找.Net解决方案,这可能没有任何意义。您可以尝试上述解决方案。