ldap - 从域中获取搜索库,是不是?

时间:2011-09-20 16:28:22

标签: ldap

有些客户要求从我的应用中使用的域中获取搜索库。

例如,如果我的域的域控制器是ad.mydomain.com,则以下列方式构建serch基础是正确的:dc = ad,dc = mydomain,dc = com?

我不确定一旦域名更改,搜索库也必须更改,因为否则我的应用程序。不会工作得很好。

THX。

2 个答案:

答案 0 :(得分:1)

通常是这种情况(至少在Active Directory的情况下)。我们为dev AD实例提供了dev.company.com,为prod AD实例提供了company.com,搜索库分别为dc = dev,dc = company,dc = com和dc = company,dc = com。

我在Spring Security的AD身份验证提供程序中看到了相同的做法。它从域名派生根DN,如下所示:

private String rootDnFromDomain(String domain) {
    String[] tokens = StringUtils.tokenizeToStringArray(domain, ".");
    StringBuilder root = new StringBuilder();

    for (String token : tokens) {
        if (root.length() > 0) {
            root.append(',');
        }
        root.append("dc=").append(token);
    }

    return root.toString();
}

来源:Spring Security ActiveDirectoryLdapAuthenticationProvider.java的来源

答案 1 :(得分:1)

虽然可能存在在AD世界中使用dc=domain,dc=com的约定,但确定目录服务器支持的命名上下文的正确方法是在根DSE中查询namingContexts属性。列出的命名上下文是由服务器托管或隐藏的命名上下文。有关根DSE的更多信息,请参阅"LDAP: The root DSE"。请注意,服务器可能托管或隐藏多个命名上下文。另请参阅"LDAP: Programming Practices"