C# active directory远程访问

C# active directory远程访问,c#,active-directory,C#,Active Directory,我已经在aws EC2机器windows 2012上设置了active directory。 它在本地非常有效。我已经安装了Active directory资源管理器,并且可以在本地查看用户等 问题是,我试图使用ldap(使用c#)从网络之外的计算机进行连接。 我能够成功登录,因为我的EC2有一个公共ip。 所以ValidateRadentials c#函数通过了OK 问题是,当我尝试从特定路径查询以获取用户时,会出现异常: 我调用函数: Exists(“LDAP://OU=Students,D

我已经在aws EC2机器windows 2012上设置了active directory。 它在本地非常有效。我已经安装了Active directory资源管理器,并且可以在本地查看用户等

问题是,我试图使用ldap(使用c#)从网络之外的计算机进行连接。 我能够成功登录,因为我的EC2有一个公共ip。 所以ValidateRadentials c#函数通过了OK

问题是,当我尝试从特定路径查询以获取用户时,会出现异常: 我调用函数: Exists(“LDAP://OU=Students,DC=hadoop,DC=com”) 不管我走哪条路,它都不起作用。 我得到的例外是: “指定的域不存在或无法联系”

我认为问题在于,本地hadoop.com无法从网络外部访问,因为它没有公共ip—它是我在本地创建的一个林名称

如何克服此问题,以便从网络外的pc连接到active directory服务器


非常感谢

请确保您的安全组已启用对LDAP和active directory端口的访问

所以您要这样做:

DirectoryEntry.Exists("LDAP://OU=Students,DC=hadoop,DC=com")
但它不起作用。你有两个问题

  • 当您提供的LDAP路径只有这样一个可分辨名称时,Windows会将请求发送到计算机加入的域。如果对象在同一个域上,则一切正常。如果它位于受信任的域上,DC将返回一个转介(“我不能告诉您这是什么,但我知道谁可以”),您的计算机将向另一个DC发起一个新请求。由于运行此操作的计算机未加入到该域或受信任域,因此它不知道到何处查找该对象,因此会引发异常。所以你必须告诉它去哪里。您可以通过在路径中包含域名(或特定的DC名称,如果需要)来实现此目的:
  • 但是您还需要传递凭据,这不支持。但是,该选项可以让您直接窃取和修改™ 要创建接受凭据的版本,请执行以下操作:
  • 存在公共静态bool(字符串路径、字符串用户名、字符串密码)
    {
    DirectoryEntry=新的DirectoryEntry(路径、用户名、密码);
    尝试
    {
    _=entry.NativeObject;//引发异常(可能会中断应用程序)
    返回true;
    }
    捕获(System.Runtime.InteropServices.COMException e)
    {
    如果(e.ErrorCode==未检查((int)0x80072030)||
    e、 ErrorCode==未选中((int)0x80070003)| |//ERROR_DS_NO_此类对象和路径未找到(严格意义上未找到)
    e、 ErrorCode==未选中((int)0x800708AC))//找不到组名
    返回false;
    投
    }
    最后
    {
    entry.Dispose();
    }
    }
    
    你必须做的一个改变是改变
    Bind
    的使用,因为这是一种
    内部
    方法,不能被像我们这样的凡人使用。取而代之的是,我只是得到了财产,而这正是我想要的

    您可以这样使用:

    var ouExists=Exists(“LDAP://hadoop.com/OU=Students,DC=hadoop,DC=com”,“用户名”,“密码”);
    
    您只能连接到文件夹,因为您可以ping服务器并共享驱动器。如果电脑不在公共网络上(防火墙后面),通过某种端口转发来通过防火墙,我会关闭防火墙。但还是不起作用?知道如何处理吗?它必须是一个公共IP地址,这样IP才能通过网络进行广告。远程计算机需要到IP的路由。通过端口转发,远程机器可以发送到防火墙,然后防火墙将识别端口号并转发到专用网络。我的ec2机器确实有一个公共地址。但是我的域名里面没有公共ip。防火墙已关闭,因此没有任何影响。你能解释一下我应该怎么做,因为我有点困惑吗?我想你的防火墙里面有一个私人网络。公共地址意味着外部世界(互联网)可以直接连接到机器。要能够连接,本地和远程计算机之间必须存在路由。IP地址必须是唯一的,以便internet上没有其他计算机具有相同的IP。因此,PING将在远程和本地机器之间工作。如果是公共IP,则防火墙未正确转发消息。因此,您可能会遇到防火墙上的掩码问题或DNS问题。谢谢,我这样做了,但它仍然不起作用-相同的异常…..请注意,ValidateCredentials功能正在工作,这意味着我通过了防火墙,并且凭证正常。访问路径时出现问题,路径是我创建的名为hadoop.com的windows服务器中的一个域。。。
    LDAP://hadoop.com/OU=Students,DC=hadoop,DC=com