2014-12-11 2 views
7

В DropWizard, я могу настроить основные AUTH как так (в Application#run осущ):DropWizard Auth Realms

BasicAuthProvider<SimplePrincipal> authProvider = new BasicAuthProvider(authenticator, "SECRET_REALM"); 
environment.jersey().register(authProvider); 

Мне интересно, что значение строки realm ("SECRET_REALM") есть?

Из общих концепций безопасности я понимаю, что «царство» - это место (база данных, каталог, файл, хранилище ключей и т. Д.), Где хранятся пользователи и роли/разрешения.

Что представляет собой область в DropWizard, и каково значение ее указания внутри BasicAuthProvider? Создает ли что-то с этим царством под капотом?

ответ

13

Область в определенном смысле, некоторые защищенные области/пространства на сервере. Область должна иметь имя. Если мы запустим пример из this post, используя cURL (который я рекомендую загрузить, так как он полезен при разработке), без каких-либо учетных данных пользователя, мы увидим следующее.

C:\>curl -i http://localhost:8080/simple 
HTTP/1.1 401 Unauthorized 
Date: Thu, 11 Dec 2014 18:55:02 GMT 
WWW-Authenticate: Basic realm="Basic Example Realm" 
Content-Type: text/plain 
Transfer-Encoding: chunked 

Credentials are required to access this resource. 

Так работает Basic Auth Protocol. Когда сервер хочет агент пользователя для аутентификации, чтобы получить доступ к защищенному ресурсу, он посылает обратно «401 Несанкционированное», наряду с заголовком аналогично

WWW-Authenticate: Basic realm="Basic Example Realm" 

Наименование вы предоставляете BasicAuthProvider является realm, что будет предоставлен в заголовке. Вы можете увидеть в source code

if (required) { 
    final String challenge = String.format(CHALLENGE_FORMAT, realm); 
    throw new WebApplicationException(
            Response.status(Response.Status.UNAUTHORIZED) 
        .header(HttpHeaders.WWW_AUTHENTICATE, challenge) 
        .entity("Credentials are required to access this resource.") 
        .type(MediaType.TEXT_PLAIN_TYPE) 
        .build()); 

Теперь попытайтесь получить доступ к ресурсу из браузера. Вы увидите

enter image description here

Вы также можете увидеть имя области там. RFC 2617 только государства (о realm):

область:
Строка будет отображаться для пользователей, чтобы они знали, который имя пользователя и пароль использовать. Эта строка должна содержать, по меньшей мере, имя хост, выполняющий аутентификацию, и может дополнительно указать коллекцию пользователей, которые могут иметь доступ. Пример может быть «зарегистрирован[email protected]».

+2

Еще раз спасибо @peeskillet (+1)! Я опубликовал ** много вопросов о SO, и вы, безусловно, самый тщательный, отзывчивый и полезный пользователь, которого я здесь встречал. Еще раз спасибо! – IAmYourFaja