使用LDAP从域名获取UPN别名,反之亦然

时间:2014-02-28 08:12:19

标签: java grails ldap

需要快速帮助。

我使用LDAP进行身份验证,

我想知道如何获取域的所有UPN别名&来自UPN别名的域名,

他们有什么方法可以得到这个。

请帮忙!

1 个答案:

答案 0 :(得分:1)

您实际上可以从配置树中通过LDAP从AD读取这些值。 如果您阅读以下对象: CN=Partitions,CN=Configuration,DC=your,DC=domain,DC=com将包含名为uPNSuffixes的属性。

此属性仅包含额外的后缀而不是默认值(我猜你必须从域名本身获取)。

规则是,如果uPNSuffixes属性可用,则只有默认的UPN后缀有效。

编辑:一个简单的例子是:

public List<String> getUpnSuffixes( LdapContext ctx, String domainName )
{
   // Domain name should be in DC=you,DC=domain,DC=com format
   String domConfig = "CN=Partitions,CN=Configuration," +domainName ;
   List<String> names = new ArrayList<String>();
   // Dirty hack to get the default suffix
   names.add( domainName.replaceAll( "DC=", "" ).replaceAll( "," , "." );
   // Read the configuration
   Attributes attrs = ctx.getAttributes( domConfig , new String[] { "uPNSuffixes" } );
   Attribute attr = attrs.get( "uPNSuffixes" );
   for ( int i=0; i<attr.size(); i++ )
   {
       names.add( attr.get(i) );
   }
   // Now you have all the suffixes in the "names" list. 
   return names;
}

请注意,您可能必须为ctx.getAttributes()attr.get()调用捕获 NamingException

编辑2:如果您想要反向,请搜索uPNSuffixes属性值:

public String getDomainFromUpnSuffix( LdapContext ctx, String uPNSuffix )
{
   String filter = "(&(CN=Partitions)(uPNSuffixes=" + uPNSuffix + "))" ;
   // Find the configuration for this suffix
   NamingEnumeration<SearchResult> results = ctx.search( "", filter, null );
   while ( results.hasMore() )
   {
       SearchResult result = results.next();
       return result.getNameInNamespace();
   }
   return null;
}