Как я могу подключиться к Http-серверу с Basic Auth over SSL на Android? - PullRequest
0 голосов
/ 30 марта 2011

Я знаю, что этот вопрос задавался ранее, но ни один из ответов, которые я нашел, не помогает мне. Я пытаюсь подключиться к простой службе входа через SSL с Basic Http Auth. Служба размещена на https://localhost:8443/login. Когда я запускаю службу из браузера (в Windows, OSX и Android), она работает нормально, я ввожу свое имя пользователя и пароль, и я аутентифицируюсь должным образом. Однако, когда я пытаюсь сделать это с помощью кода на моем Xoom, я получаю исключение ClientProtocolException, которое говорит, что «серверу не удалось ответить действительным HTTP-ответом». Кто-нибудь может дать мне толчок в правильном направлении? Вот мой код

        String result = null;

        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, HTTP.DEFAULT_CONTENT_CHARSET);
        HttpProtocolParams.setUseExpectContinue(params, true);

        SchemeRegistry schReg = new SchemeRegistry();
        schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        schReg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
        ClientConnectionManager conMgr = new ThreadSafeClientConnManager(params, schReg);

        DefaultHttpClient client = new DefaultHttpClient(conMgr, params);

        HttpGet get = new HttpGet(preferences.getString(getString(R.string.Security_Login_URL),
        "https://localhost:80/login"));

        String credentials = Base64.encodeToString((username + ":" + password).getBytes(), Base64.URL_SAFE);
        if(credentials!=null){
        get.addHeader("Authorization","Basic "+credentials);
        ResponseHandler responseHandler=new BasicResponseHandler();
        try {
            result = client.execute(get, responseHandler);
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

1 Ответ

1 голос
/ 30 марта 2011

Это может быть вызвано двумя распространенными проблемами:

  1. Вы не должны выполнять BASIC-аутентификацию самостоятельно.Apache HttpClient имеет все функции, уже включенные для выполнения BASIC-аутентификации.Посмотрите либо Обычная аутентификация , либо Преимущественная базовая аутентификация

  2. Доверяет ли ваше устройство Android сертификат с сервера?Когда ваш браузер доверяет сертификату, это не означает, что ваше устройство также доверяет ему.У Android очень ограниченный список доверенных центров сертификации.Вы можете проверить это со своего устройства, когда заходите на сайт через встроенный браузер Android.Если предупреждающее сообщение не появляется, все должно быть в порядке.Для получения дополнительной информации о доверии дополнительных сертификатов с устройства Android вы можете посмотреть мою статью в блоге .

Наслаждайтесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...