首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用LdapConnection枚举AD

使用LdapConnection枚举AD
EN

Stack Overflow用户
提问于 2012-02-03 07:56:42
回答 2查看 6.4K关注 0票数 3

是否可以使用System.DirectoryServices.Protocols中的LdapConnection来查询Active Directory?

我在实例化PrincipalContext时遇到了问题。以下是我的代码,以防有人能发现问题:

代码语言:javascript
复制
    private LdapConnection getLdapConnection(string username, string password, string ldapServer, bool secured)
    {
        int port = secured ? 636 : 389;

        LdapConnection connection = new LdapConnection(new LdapDirectoryIdentifier(ldapServer, port, false, false));

        if (secured)
        {
            connection.SessionOptions.ProtocolVersion = 3;
            connection.SessionOptions.SecureSocketLayer = true;
        }


        connection.Credential = new NetworkCredential(username, password);
        connection.AuthType = AuthType.Basic;
        connection.SessionOptions.VerifyServerCertificate += (conn, cert) => { return true; };
        connection.Bind();

        return connection;
    }

在尝试实例化我正在使用的主体上下文时

代码语言:javascript
复制
        PrincipalContext context = new PrincipalContext(
            ContextType.Domain,
            ldapServer,
            null,
            useSsl ? ContextOptions.SecureSocketLayer | ContextOptions.SimpleBind : ContextOptions.SimpleBind,
            username,
            password);

为了完整起见,我在中传递了相同的值,用户名采用domain\user格式,而ldapServer采用server.domain.com格式,并在创建主体上下文时附加了带有:636的ldapServer。

我正在连接的服务器有证书问题,我猜这可能是因为LdapConnection设置为返回true进行验证而阻止了这一点。这不是一个问题,因为它是可信的。我没有访问服务器的权限,因此无法更改此设置。

EN

回答 2

Stack Overflow用户

发布于 2012-02-03 12:21:21

据我所知,当你以一个域为目标时,容器参数不能为null。你能不能试试这个构造函数:

代码语言:javascript
复制
PrincipalContext domainContextMonou = new PrincipalContext(ContextType.Domain,
                                                           "server.domain.com :389",
                                                           "dc=domain,dc=com",
                                                           username,
                                                           password);

然后是这个:

代码语言:javascript
复制
PrincipalContext domainContextMonou = new PrincipalContext(ContextType.Domain,
                                                           "server.domain.com :636",
                                                           "dc=domain,dc=com",
                                                           useSsl ? ContextOptions.SecureSocketLayer | ContextOptions.SimpleBind : ContextOptions.SimpleBind,
                                                           username,
                                                           password);
票数 2
EN

Stack Overflow用户

发布于 2012-02-05 06:10:46

我怀疑您使用LDAP代码的部分问题是因为您使用的是AuthType.Basic。请尝试使用Negotiate

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9121854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档