Диалог проверки подлинности браузера - PullRequest
0 голосов
/ 21 мая 2009

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

Обзор применения:

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

Ответы [ 5 ]

1 голос
/ 29 мая 2009

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

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 */
            }
        }
    });
1 голос
/ 21 мая 2009

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

0 голосов
/ 21 мая 2009

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

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

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

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

0 голосов
/ 21 мая 2009

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

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

википедии

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

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

0 голосов
/ 21 мая 2009

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

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

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

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

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

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