Использование веб-службы для аутентификации на LDAP - PullRequest
1 голос
/ 30 июля 2010

Поскольку в моем приложении BlackBerry, по-видимому, невозможно выполнить аутентификацию с помощью LDAP, я пытаюсь использовать своего рода обходной путь.Вместо аутентификации непосредственно на сервере LDAP я хочу использовать промежуточный веб-сервис.Вот так это выглядит

App --calls--> Web Service --calls--> LDAP Server

Таким образом, веб-служба должна взять имя пользователя и пароль, указанные в Приложении, и отправить их на сервер LDAP.Если это возможно, войдите в систему, веб-служба получает TRUE в качестве ответа и передает его в приложение.

Вот как это должно работать.Но в тот момент, когда я вызываю веб-сервис из приложения, я получаю следующую ошибку:

SoapFault - faultcode: 'S:Server' faultstring: 'java.lang.NullPointerException' faultactor: 'null' detail: org.kxml2.kdom.Node@21e05a11

Похоже, проблема с сервером, но я нене знаю где: (
Ну, это веб-служба, которую я использую:

import javax.ejb.Stateless;  
import javax.jws.WebService;  

import com.novell.ldap.LDAPConnection;  
import com.novell.ldap.LDAPException;  

@Stateless  
@WebService()  
public class ldapServiceBean implements ldapService {

    @Override
    public String error() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public boolean ldapLogin(String username, String password) {
         int ldapPort = LDAPConnection.DEFAULT_PORT;
         int ldapVersion = LDAPConnection.LDAP_V3;
         String ldapHost = "dc1.somehost ";
         String loginDN =
         "CN="+username+",OU=employee,OU=user,DC=somehost";

         byte[] passwordBytes = password.getBytes();
         LDAPConnection lc = new LDAPConnection();

         try {
             // connect to the server
             lc.connect( ldapHost, ldapPort );

             // authenticate to the server
             lc.bind( ldapVersion, loginDN, passwordBytes );
             System.out.println("Bind successful");

             return true;
         }
         catch( LDAPException e ) {
             if ( e.getResultCode() == LDAPException.NO_SUCH_OBJECT ) {
                 System.err.println( "Error: No such entry" );
             } else if ( e.getResultCode() ==
                 LDAPException.NO_SUCH_ATTRIBUTE ) {
                 System.err.println( "Error: No such attribute" );
             } else {
                 System.err.println( "Error: " + e.toString() );
             }
         }
        return false;
    }

И это метод, вызывающий веб-службу

private static final String SOAP_ACTION = "";  
    private static final String METHOD_NAME = "ldapLogin";  
    private static final String NAMESPACE = "http://ldapproxy.somehost/";  
    private static final String URL = "http://myIP:8080/LDAPProxy/ldapServiceBeanService";  

...  


public boolean login(String username, String password) {


        SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME); 

        //SoapObject
        request.addProperty("username", username);
        request.addProperty("password", password);

        SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
        //envelope.dotNet = true;
        //envelope.bodyOut = request;
        envelope.setOutputSoapObject(request);       

        HttpTransport httpTransport = new HttpTransport(URL);
        try
        {

            httpTransport.call(SOAP_ACTION, envelope);

            System.out.println("request: " + httpTransport.requestDump);
            resultsRequestSOAP = (SoapObject) envelope.getResponse();

            return true;

        }catch(SoapFault sF){
            String error = sF.toString();
            Dialog.alert(error);
        }
        catch (Exception aE)
        {
            Dialog.alert("Connection failed");
            aE.printStackTrace ();
        }
        return false;

    }

Что яДо сих пор выяснилось: кажется, что веб-сервис не получает свойства имени пользователя и пароля. Когда я их распечатываю, я получаю:

`CN=null, OU=employee, OU=...`

Как я читал в этом посте Получает веб-сервиснулевые параметры из приложения с использованием метода ksoap кажется, что у ksoap есть проблема с двоеточиями. Я изменил NAMESPACE, но безуспешно. Возможно, мне тоже нужно изменить URL-адрес. Но как мне это сделать, пока мне все еще нужно использовать localhost

1 Ответ

1 голос
/ 01 августа 2010

Как всегда при выполнении LDAP-тестирования привязки, помните, что стандарт требует, чтобы привязка имени пользователя, а не пароля, была успешной анонимной привязкой, поэтому вы ДОЛЖНЫ проверять этот случай (пустой пароль) при попытках входа в систему.

...