在远程服务器上使用 LdapConnection class 连接到 Active Directory
Connect to Active Directory using LdapConnection class on remote server
我有一个问题:我需要从远程服务器连接到 Active Directory,但代码必须使用 LdapConnection
class。我需要这个,因为那样我只能在某些事件发生时测试更改通知程序(例如用户被停用或他更改了组、数据等)。 OS 在远程服务器上是 Windows Server 2012。
我设法在本地使用 DirectoryServices
和以下代码完成此操作:
String ldapPath = "LDAP://XRMSERVER02.a24xrmdomain.info";
directoryEntry = new DirectoryEntry(ldapPath, @"A24XRMDOMAIN\username", "pass");
//// Search AD to see if the user already exists.
DirectorySearcher search = new DirectorySearcher(directoryEntry);
search.Filter = "(&(objectClass=user))";
SearchResult result = search.FindOne();
没关系,连接正常,但现在我需要使用 LdapConnection
class.
进行连接
我尝试了很多类似的方法,但 none 对我有帮助:
LdapConnection connection = new LdapConnection(XRMSERVER02.a24xrmdomain.info);
var credentials = new NetworkCredential(@"A24XRMDOMAIN\username", "pass");
connection.Credential = credentials;
connection.Bind();
它说凭据无效,但事实并非如此。
解释:
XRMSERVER02
- 域控制器
a24xrmdomain.info
- 域
A24XRMDOMAIN
- 用于日志记录的域
感谢您的帮助。
尝试使用具有 3 个参数的 NetworkCredential 构造函数:用户名、密码和域。与用户名分开指定域
尽管我解决了我的问题,但我还是想与其他开发人员分享我目前所取得的成就。我遇到的问题是我的远程服务器上有 OS Windows server 2012
和 Active Directory。我需要通过我的本地机器 (Windows 10
) 连接到他。
正如我在问题中所述,可以使用以下代码通过 DirectoryServices
来做到这一点:
String ldapPath = "LDAP://(DomainController).a24xrmdomain.info";
directoryEntry = new DirectoryEntry(ldapPath, @"DOMAIN\username","pass");
//// Test search on AD to see if connection works.
DirectorySearcher search = new DirectorySearcher(directoryEntry);
search.Filter = "(&(objectClass=user))";
SearchResult result = search.FindOne();
这是解决方案之一,但由于我的任务是获取通知并确定 Active Directory 中的某个对象何时发生更改,因此我需要通过 LDAP
[= 连接到远程服务器上的 Active Directory 29=]。获取通知程序的代码取自:
- Registering change notification with Active Directory using C#
我通过下一个代码成功连接到 LDAP
class:
String ldapPath2 = "(DomainController).a24xrmdomain.info";
LdapConnection connection = new LdapConnection(ldapPath2);
var credentials = new NetworkCredential(@"username", "pass");
connection.Credential = credentials;
connection.Bind();
想提一下,不需要远程服务器的IP地址,只需要在他身上使用的域控制器,不需要用于日志记录的域。
编码愉快
我有一个问题:我需要从远程服务器连接到 Active Directory,但代码必须使用 LdapConnection
class。我需要这个,因为那样我只能在某些事件发生时测试更改通知程序(例如用户被停用或他更改了组、数据等)。 OS 在远程服务器上是 Windows Server 2012。
我设法在本地使用 DirectoryServices
和以下代码完成此操作:
String ldapPath = "LDAP://XRMSERVER02.a24xrmdomain.info";
directoryEntry = new DirectoryEntry(ldapPath, @"A24XRMDOMAIN\username", "pass");
//// Search AD to see if the user already exists.
DirectorySearcher search = new DirectorySearcher(directoryEntry);
search.Filter = "(&(objectClass=user))";
SearchResult result = search.FindOne();
没关系,连接正常,但现在我需要使用 LdapConnection
class.
我尝试了很多类似的方法,但 none 对我有帮助:
LdapConnection connection = new LdapConnection(XRMSERVER02.a24xrmdomain.info);
var credentials = new NetworkCredential(@"A24XRMDOMAIN\username", "pass");
connection.Credential = credentials;
connection.Bind();
它说凭据无效,但事实并非如此。
解释:
XRMSERVER02
- 域控制器a24xrmdomain.info
- 域A24XRMDOMAIN
- 用于日志记录的域
感谢您的帮助。
尝试使用具有 3 个参数的 NetworkCredential 构造函数:用户名、密码和域。与用户名分开指定域
尽管我解决了我的问题,但我还是想与其他开发人员分享我目前所取得的成就。我遇到的问题是我的远程服务器上有 OS Windows server 2012
和 Active Directory。我需要通过我的本地机器 (Windows 10
) 连接到他。
正如我在问题中所述,可以使用以下代码通过 DirectoryServices
来做到这一点:
String ldapPath = "LDAP://(DomainController).a24xrmdomain.info";
directoryEntry = new DirectoryEntry(ldapPath, @"DOMAIN\username","pass");
//// Test search on AD to see if connection works.
DirectorySearcher search = new DirectorySearcher(directoryEntry);
search.Filter = "(&(objectClass=user))";
SearchResult result = search.FindOne();
这是解决方案之一,但由于我的任务是获取通知并确定 Active Directory 中的某个对象何时发生更改,因此我需要通过 LDAP
[= 连接到远程服务器上的 Active Directory 29=]。获取通知程序的代码取自:
- Registering change notification with Active Directory using C#
我通过下一个代码成功连接到 LDAP
class:
String ldapPath2 = "(DomainController).a24xrmdomain.info";
LdapConnection connection = new LdapConnection(ldapPath2);
var credentials = new NetworkCredential(@"username", "pass");
connection.Credential = credentials;
connection.Bind();
想提一下,不需要远程服务器的IP地址,只需要在他身上使用的域控制器,不需要用于日志记录的域。
编码愉快