2009-05-21 3 views
0

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

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

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

ответ

1

SWT 3.5M6 имеет новый прослушиватель в нем, вызывающий аутентификацию. Он просто прослушивает событие аутентификации, переданное с сервера, и запускается. Ниже приведен код, который выполняет поведение, которое я хотел. Он ждет авторизации, и если хост является моим приложением, он возвращает учетные данные. Конечно, заполните USER_NAME, PASSWORD и HOST_NAME с соответствующими переменными. В противном случае открывается диалоговое окно браузера auth и пользователь вводит учетные данные. Этот код также можно найти на странице 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 */ 
      } 
     } 
    }); 
+0

Вы получили это, чтобы работать? Кажется, это не влияет на меня, и слушателя никогда не называют. – willcodejavaforfood

+0

@willcodejavaforfood - Это будет работать, если он пытается использовать AUTHENTICATE, а не если он пытается установить AUTHORIZE. У меня была та же проблема, что и вы, когда она вообще не попадала в этот код. Я просто передал учетные данные в URL-адресе, таком как RedWolves. –

+0

@ Ryan - Спасибо :) – willcodejavaforfood

0

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

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

Setting up Authentication for Web Applications

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

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

+0

спасибо за ответ , пытаясь понять лучший способ объяснить. так что вот оно ... Я написал веб-сервер, поэтому по существу я хочу, чтобы кто-то не открывал внешний браузер и не помещал его в localhost и порт. У моего приложения встроенный веб-браузер, связанный с моим письменным сервером. содержимое, поэтому, если я заставляю auth (даже для моего встроенного браузера), exter чтобы браузеру понадобились учетные данные. если мой встроенный браузер пытается получить доступ к файлам, я поставлю учетные данные для пользователя и покажу содержимое. – 2009-05-21 19:47:14

+0

OK Ken, предлагаю вам обновить свой вопрос с подробной информацией в этом комментарии ... Я обновлю свой ответ –

+0

Спасибо за ваши предложения Майкл. Все еще не уверен, каким образом я буду использовать эту проблему, но ваши идеи полезны. – 2009-05-21 21:23:36

1

Если вам не нужен пароль, вы можете создать URL-адрес, чтобы он передавал учетные данные ex. http://username:[email protected] Это позволит передать окно проверки подлинности, но покажет пользователю учетные данные, а также может не быть тем, что вы ищете.

+0

Спасибо за ваш ответ. Я хотел бы, чтобы это произошло в фоновом режиме. пользователь никогда не узнает, что учетные данные были необходимы вообще, если они вошли в мое приложение, используя мой встроенный браузер. поэтому я хочу хранить свои учетные данные в секрете. это так, что внешние браузеры, пытающиеся получить доступ к тому же файлу/порту, нуждаются в учетных данных, которых у них нет. Я предоставляю учетные данные только для моего встроенного браузера – 2009-05-21 19:52:46

0

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

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

wikipedia

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

надежда, что помогает

+0

. я уже отправляю все заголовки туда и обратно, и я могу получить доступ к своему контенту, если я введу учетные данные. Я хочу знать, как в java я могу перехватить этот заголовок auth (так что диалог не отображается) и заполнить эти учетные данные. как вы заявили. несколько моих комментариев выше в основном описывают мое приложение для вашей справки. – 2009-05-21 19:57:23

0

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

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

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

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

Смежные вопросы