2016-01-29 2 views
0

Я пытаюсь использовать Dropwizard как полный веб-сервер, объединяющий общедоступные страницы, защищенные страницы и данные через REST API. Таким образом, я проверяю возможность защиты некоторых маршрутов, применяя специальную схему авторизации на основе вычисленного токена и области для управления различными областями безопасности.Dropwizard - как достичь пользовательской схемы авторизации?

У меня есть трудности, чтобы понять, как достичь цели. Последовательность я ожидал следующий:
- отобразить страницу входа в HTML с формой пользователя
- пользователь вводит свои учетные данные
- вызвать маршрут AUTHENTICATE для проверки учетных данных и создать маркер для пользователя. Отправить назад приветственную страницу с Authorization заголовок, как: MyScheme маркер = «TYGDF655HD88D098D0970CUCHD987D897», царств = «SUPER SECRET Stuff»
- пользователь нажимает на ссылку, чтобы перечислить его счета-фактуры:/HTML/счета
- этот маршрут защищен DropWizard @Auth аннотация
- ни один заголовок не отправляется браузером, поэтому сервер отвечает с ответом 401 с заголовком: WWW-Authenticate MyScheme realm = «SUPER SECRET STUFF», бросая вызов браузеру, чтобы дать ему заголовок авторизации, соответствующий вызову

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

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

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

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

Ссылка (хорошо читать): RFC1945 на http://tools.ietf.org/html/rfc1945#section-11

Спасибо за вашу помощь.

Запуск dropWizard 0.9.2 на JDK Oracle 1.8/Debian 8.

ответ

0

Browser не управляет авторизации. Он никогда не делает, или, по крайней мере, никогда не должен.

Сервер всегда должен хранить свой кеш и проверять ввод данных из браузера.

На базовом уровне все необходимые вам поля являются частью HTTP-заголовка. Если вы введете запрос, у вас будет доступ к ним.

Если у dropwizard нет необходимых вещей, вы всегда можете игнорировать все и просто читать заголовки запросов и выполнять необходимую обработку.

Например, добавьте фильтр, который устанавливает realm, что-то вроде WWW-Authenticate: Basic realm="myrealm:"

Authorization: MyScheme Ceasar-cipher-password. Вам нужно будет разобрать его и обработать самостоятельно, возможно, настроить входящий фильтр для всех запросов или выборочных запросов.

Это хорошая идея, я позволю вам стать судьей. Возможно, в вашем случае использования это имеет смысл.

Если вы посмотрите на исходный код и как используются BasicCredentials, возможно, он может дать представление о потенциальном решении, которое вы можете адаптировать самостоятельно.

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

+0

Благодарим вас за ответ. Если браузер не должен управлять _Authorization cache_, как он может ответить на запрос ** 401 **, который бросает вызов ему о некоторых учетных данных в области безопасности? Если основной auth задействован, браузер может открыть диалоговое окно входа в систему, а затем отправить соответствующий заголовок, но по неизвестной схеме, как продолжить? – mnementh64

+0

@ mnementh64 Задача браузера состоит в том, чтобы просто создать запрос и передать его на сервер. Сервер отвечает сообщением об ошибке. Поэтому, если вы получаете 401, сервер обрабатывает его. На мой взгляд, вы должны отлаживать код сервера. Вы должны написать код на сервере, который будет обрабатывать настраиваемый заголовок. – Nasir

+0

О, извините, я не прояснился. Это сервер, который отвечает на ответ с состоянием 401, и это нормально, потому что ресурс, который вы хотите получить, требует аутентификации. Поэтому браузер должен сделать что-то с этим. Я знаю, что этот случай обычно управляется с помощью файлов cookie (которые повторно отправляются браузером в каждом запросе). Должно быть что-то я пропустил ... – mnementh64