Microsoft Active Directory Authentifizierung mit Java

AlexD1979

Erfahrenes Mitglied
Hi,
Es gibt da so ein tolles Package von Novell (jLDAP) über das ich bei Google öfters gestolpert bin. Nun habe ich mir dieses Paket genommen und kann damit auch erfolgreiche Auth an ein Novell eDirectory machen, scheitete aber am einem MS ADS. ich habe im Quellcode die Schritte kommentiert bis zu dem Punkt wo die Exception geworfen wird
Die Fehlermeldung lautet :
Error: LDAPReferralException: Search result reference received, and referral following is off (10) Referral
LDAPReferralException: Referral: ldap://DomainDnsZones.de.corp/DC=DomainDnsZones,DC=de,DC=corp

hier der entsprechende Teilcode (der erste Bind mit einem "queryuser" funktioniert):
Code:
public String  auth(String user, String pass) throws J2InternalException{
			
		String filter=searchFilter.replaceAll("__user__",user);
		LDAPConnection lc = new LDAPConnection();
		try {
			lc.connect( ldapHost, ldapPort );
		} catch (LDAPException e) {
			Exceptions.throwInternalException(e,"Error connecting to Ldap server");
		}
        // bind to the server
       
        try {
			lc.bind( ldapVersion, loginDN, password.getBytes("UTF8") );  //Der Bind funktioniert und ich bin verbunden
		} catch (Exception e) {
			Exceptions.throwInternalException(e,"Failed to login for search");
		} 
        
		LDAPSearchResults searchResults = null;
		try {
			searchResults = lc.search(  searchBase,
                        searchScope,
                        filter,
                        new String[] {},          // return all attributes
                        true);
		} catch (LDAPException e1) {
			Exceptions.throwInternalException(e1,"Failed to  search");
		} 
		
		System.out.println(searchResults.getCount());	 //Hier kommt 1 zurück, also ein Treffer	
		  while ( searchResults.hasMore()) {
              
			  LDAPEntry nextEntry = null;		  
              try {
                  nextEntry = searchResults.next();         //und hier wird die Exception ausgelöst, alles danach wird nicht mehr bearbeitet.                
              }
              catch(LDAPException e) {
                  System.out.println("Error: " + e.toString());

                  // Exception is thrown, go for next entry                  
                  if(e.getResultCode() == LDAPException.LDAP_TIMEOUT || e.getResultCode() == LDAPException.CONNECT_ERROR) {                	  
                	  System.out.println("y1");
                	  break;                  
                  }else {
                	  System.out.println("y2");
                  	continue;
                  }
              }
              System.out.println("Entry:"+nextEntry.getDN());
              try {            	  
				lc.bind( ldapVersion, nextEntry.getDN(), pass.getBytes("UTF8") );
			} catch (UnsupportedEncodingException e) {
				Exceptions.throwInternalException(e);
			} catch (LDAPException e) {
				return null;
			}
              
              if(lc.isBound()){
              	  return nextEntry.getDN();
              }
		  }
              
              try {
				lc.disconnect();
			} catch (LDAPException e) {
				Exceptions.throwInternalException(e,"Failed to  disconnect");
			}
		return null;
	}
 
Warum nutzt du denn nicht einfach den Kerberos-Server? Den bringt doch schon das AD mit und da brauchst du auch keine zusätzlichen Packages für Java. Sobald sich der Benutzer ggb dem OS authentifiziert hat kannst du für den Java-Dienst ein Ticket anfordern und dich mit dem authentifizieren
 
Zurück