我正在使用MVC在ASP.net 4.0中开发Web应用程序。
在我的应用程序中,我使用Exchnage server 2007发送电子邮件。
我从交换服务器获取全局地址列表。
现在的问题是如何使用UserName,Password和domain name获取Active Directory的LDAP路径。
目前我正在做的是我正在使用DirectoryEntry的对象n为我事先知道的服务器传递LDAP路径。
但是,如果其他未知的exchnage服务器的凭证正在使用呢?
答案 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解决方案,这可能没有任何意义。您可以尝试上述解决方案。