Диалоговое окно «Переопределить аутентификацию браузера»

StackOverflow https://stackoverflow.com/questions/894631

  •  23-08-2019
  •  | 
  •  

Вопрос

Есть ли способ использовать Java для отмены диалогового окна аутентификации браузера при получении сообщения 401 от веб-сервера?Я хочу знать, когда отображается это диалоговое окно, и вместо того, чтобы предоставить его пользователю, я заполняю для него учетные данные.

Обзор приложения:

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

Это было полезно?

Решение 2

В SWT 3.5M6 есть новый прослушиватель под названием AuthenticationListener.Он просто прослушивает событие аутентификации, переданное с сервера, и запускается.Код ниже — это то, что выполняет то поведение, которое я хотел.Он ожидает аутентификации и, если хостом является мое приложение, возвращает учетные данные.Конечно, заполните USER_NAME, PASSWORD и HOST_NAME соответствующими переменными.В противном случае появляется диалоговое окно аутентификации браузера и заставляет пользователя ввести учетные данные.Этот код также можно найти на странице фрагментов Eclipse SWT:

webBrowser.addAuthenticationListener(новый AuthenticationListener()

{

        public void authenticate(AuthenticationEvent event) {
            try {
                URL url = new URL(event.location);

                if (url.getHost().equals(HOST_NAME)) 
                {
                    event.user = USER_NAME;
                    event.password = PASSWORD;
                } 
                else 
                {       
                    /* do nothing, let default prompter run */
                }
            } catch (MalformedURLException e) {
                /* should not happen, let default prompter run */
            }
        }
    });

Другие советы

Если вас не волнует отображение пароля, вы можете создать URL-адрес, чтобы он передавал учетные данные, например. http://имя пользователя:пароль@www.example.com При этом поле аутентификации будет пропущено, но пользователю будут показаны учетные данные, поэтому это может быть не то, что вы ищете.

ваш вопрос немного неясен.Вся базовая аутентификация основана на заголовках HTTP.

Если браузер получает заголовок авторизации, он отображает диалоговое окно.Содержимое диалогового окна затем отправляется обратно на сервер.В этом нет ничего особенного.Это имя пользователя: пароль в кодировке Base64.Посмотри на

Википедия

Проблема в том, как вы хотите вмешаться.Вам придется захватить заголовок авторизации, а затем для следующего запроса вам придется изменить заголовок HTTP, включив в него учетные данные.

надеюсь, это поможет

Я думаю, что это в основном зависит от браузера и от того, что сервер сообщает браузеру.

Например, Internet Explorer, будучи продуктом Microsoft, напрямую поддерживает автоматическую отправку учетных данных Windows (вы можете изменить это поведение в настройках Интернета) после сбоя анонимного запроса с ошибкой 401.

Firefox, например, не запрашивает и всегда будет запрашивать пользователя, даже если он был настроен на запоминание идентификатора и пароля через менеджер паролей.IE также выдаст запрос, если автоматический вход не удался (например, ваши учетные данные Windows по-прежнему приводят к ошибке 401, поскольку ваш идентификатор не разрешен).

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

Если вы хотите контролировать то, что отображается пользователю для аутентификации, вы можете изменить метод auth в разделе login-config файла web.xml с BASIC на FORM.

Затем вы можете указать, какая страница должна отображаться при аутентификации пользователя, и, я полагаю, предварительно заполнить для них учетные данные... но разве это не противоречит всей цели безопасности?

Настройка аутентификации для веб-приложений

Изменить после получения дополнительной информации:

Мое единственное предложение — изменить метод аутентификации на CLIENT-CERT и потребовать двусторонний SSL, при котором клиент также должен предоставить сертификат серверу.Если вы установите сертификат во встроенный браузер (и убедитесь, что внешние браузеры не могут получить сертификат), тогда все будет в порядке.И на самом деле это должно остановить отображение любого диалогового окна аутентификации.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top