2014-10-10 167 views
2

在Grails項目中,我需要連接Active Directory並搜索用戶(身份驗證目的)。連接到Active Directory並搜索用戶

我在LDAP和Active Directory中使用Groovy LDAP API或更大。

我公司給了我一個用戶憑證用於測試

OU=Vendors,DC=company,DC=net 
CN=Testing -2 
sAMAccountName=test2 
password=test123 
ip=LDAP://xx.xx.xx.xx:389 

所以對於我的嘗試

LDAP ldapConn = LDAP.newInstance("LDAP://xx.xx.xx.xx:389", "CN=Testing -2,OU=Vendors,DC=company,DC=net", "test123") 
try{ 
    def results = ldapConn.search('(CN=Testing -2)', 'OU=Vendors,DC=company,DC=net', SearchScope.ONE) 
    println "${results.size} entries found:" 
    println results 
} 
catch(Exception ex){ 
    println ex.printStackTrace() 
} 

上面的代碼工作,我使用CN=Testing -2與Active Directory的結合,但公司員工始終使用sAMAccountName進行登錄。

所以,當我試圖與sAMAccountName賦= TEST2和密碼綁定

LDAP ldapConn = LDAP.newInstance("LDAP://xx.xx.xx.xx:389", "sAMAccountName=test2,OU=Vendors,DC=company,DC=net", "test123") 
try{ 
    def results = ldapConn.search('(sAMAccountName=test2)', 'OU=Vendors,DC=company,DC=net', SearchScope.ONE) 
    println "${results.size} entries found:" 
    println results 
} 
catch(Exception ex){ 
    println ex.printStackTrace() 
} 

我越來越

java.lang.NullPointerException 
Error | 
    at org.apache.directory.groovyldap.LDAP.search(Unknown Source) 
Error | 
    at org.apache.directory.groovyldap.LDAP$search.call(Unknown Source) 
Error | 

讓我怎麼繼續,test2的用戶總是用戶自己sAMAccountName (test2)與登錄不CN (Testing -2)

回答

2

嗯,這裏有兩件不同的事情。首先創建新的LDAP實例(LDAP.newInstance),然後創建搜索進程(ldapConn.search)。在您的示例代碼中,您對兩種方法都使用相同的憑據。但它確實應該是:

  • LDAP.newInstance
  • 不同的sAMAccountName有效的連接字符串來測試針對的ldapConn.search

因此作爲第一步,你應該嘗試使用你原來的工作連接字符串(包括LDAP.newInstance("LDAP://xx.xx.xx.xx:389", "CN=Testing -2,... - 對於初學者),並在您的ldapConn.search離開您要檢查的sAMAccountName

說明:根據您的設置,連接您嘗試的方式可能是無效的,此外,它將是一種更簡潔的方法,可以不檢查兩個地方,但初始連接肯定工作,只有搜索返回實際結果。

在下面的文章有關於不同LDAP屬性,這也可能是有益的一些信息: http://www.computerperformance.co.uk/Logon/LDAP_attributes_active_directory.htm