Как сделать недействительным токен, сохраненный в веб-браузере Android после того, как httpAuthHandler продолжит работу с правильной парой имя пользователя / пароль? - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть реализация веб-просмотра, где я загружаю URL с помощью API loadUrl (url) .Сервер имеет проверку подлинности, и поэтому сервер отправляет 401 в ответ, который обрабатывается onReceivedHttpAuthRequest (представление WebView, обработчик HttpAuthHandler, хост String, область String) .

WebView отвечает с правильной реализацией дляпервый ответ 401.После этого ответа WebView сохраняет токен аутентификации, который используется для последующих запросов.

Есть ли способ аннулировать сохраненный токен?

1 Ответ

0 голосов
/ 01 марта 2019

Я нашел способ аутентифицировать пару имя пользователя / пароль каждый раз, когда loadUrl пытается подключиться к серверу.

Вы должны использовать loadUrl(String url, Map<String, String> additionalHttpHeaders).Этот метод принимает URL-адрес и дополнительныеHttpHeaders, которые вы хотите отправить с соответствующим URL-адресом.

Например, для целей базовой аутентификации WebView может отправить заголовок авторизации, используя следующие шаги:

  1. Создайте строку имени пользователя и пароля, разделенных двоеточием (:).Например, username:password.
  2. Кодировать эту строку, используя Base64.
  3. Добавьте пару ключ / значение на карту, где ключ = "Авторизация" и значение = result of step 2.
  4. Отправьте карту с URL-адресом, используя вышеупомянутый loadUrl метод.

Я добавляю следующий код для других разработчиков, чтобы понять мое решение:

@Override
protected void onResume() {
    super.onResume();
    final WebView webView = findViewById(R.id.webview);
    webView.setWebViewClient(new WebViewClient());
    doWebSettings(webView);
    webView.loadUrl(**url you want to load**, getBasicHeader());
}

private void doWebSettings(WebView webView) {
    ***These are example WebSettings**
    final WebSettings webSettings = webView.getSettings();
    webSettings.setAllowFileAccess(true);
    webSettings.setAllowFileAccessFromFileURLs(true);
    webSettings.setJavaScriptEnabled(true);
    webSettings.setAllowUniversalAccessFromFileURLs(true);
}

private Map getBasicHeader() {
    Map<String, String> additionalHeader = new HashMap();
    additionalHeader.put("Authorization", "Basic "+ getEncodedString());
    return additionalHeader;
}

private String getEncodedString(String username, String password) {
    final String userpass = username+":"+password;
    return Base64.encodeToString(userpass.getBytes(),
            Base64.DEFAULT);
}

Это решение будет гарантировать, что при каждой загрузке URL-адреса сервер будет проверятьДополнительные заголовки для аутентификации скорее.Поэтому WebView не будет отправлять предыдущий аутентифицированный токен.Если предоставленная пара имя пользователя / пароль неверна, то будет вызван HttpAuthHandler # continue и будет вызвано поведение по умолчанию, которое отменяет запрос.

...