Рубрики
Без рубрики

Дайджест-проверка подлинности Spring Security

Дайджест-аутентификация с помощью проекта Spring MVC – конфигурация пространства имен XML и несколько примеров использования приложения с помощью curl.

Автор оригинала: Eugen Paraschiv.

1. Обзор

В этом руководстве показано, как настроить, настроить и настроить дайджест-аутентификацию с помощью Spring. Как и в предыдущей статье , посвященной базовой аутентификации, мы собираемся использовать учебник Spring MVC и защитить приложение с помощью механизма дайджест-аутентификации, предоставляемого Spring Security.

2. Конфигурация XML Безопасности

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

В этом случае нам нужно вручную определить необработанные компоненты , которые будут составлять конфигурацию безопасности – фильтр DigestAuthenticationFilter и точку DigestAuthenticationEntryPoint :


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

Первая часть этого указывает на пользовательский компонент точки входа с помощью атрибута entry-point-ref основного элемента .

Вторая часть-это добавление недавно определенного дайджест-фильтра в цепочку фильтров безопасности . Поскольку этот фильтр функционально эквивалентен BasicAuthenticationFilter , мы используем ту же относительную позицию в цепочке – это указано псевдонимом BASIC_AUTH_FILTER в общих Стандартных фильтрах безопасности Spring .

Наконец, обратите внимание, что Дайджест – фильтр настроен так, чтобы указывал на компонент службы пользователя – и здесь пространство имен снова очень полезно, поскольку оно позволяет нам указать имя компонента для службы пользователя по умолчанию, созданной элементом :

3. Использование защищенного приложения

Мы будем использовать команду curl для использования защищенного приложения и понимания того, как клиент может взаимодействовать с ним.

Давайте начнем с запроса домашней страницы – без предоставления учетных данных безопасности в запросе:

curl -i http://localhost/spring-security-mvc-digest-auth/homepage.html

Как и ожидалось, мы получаем ответ с кодом состояния 401 Unauthorized :

HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=CF0233C...; Path=/spring-security-mvc-digest-auth/; HttpOnly
WWW-Authenticate: Digest realm="Contacts Realm via Digest Authentication", qop="auth", 
  nonce="MTM3MzYzODE2NTg3OTo3MmYxN2JkOWYxZTc4MzdmMzBiN2Q0YmY0ZTU0N2RkZg=="
Content-Type: text/html;charset=utf-8
Content-Length: 1061
Date: Fri, 12 Jul 2013 14:04:25 GMT

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

Давайте теперь предоставим правильные учетные данные и отправим запрос снова:

curl -i --digest --user 
   user1:user1Pass http://localhost/spring-security-mvc-digest-auth/homepage.html

Обратите внимание, что мы включаем дайджест –аутентификацию для команды curl с помощью флага – digest .

Первый ответ от сервера будет таким же – 401 Несанкционированный – но теперь вызов будет интерпретирован и обработан вторым запросом, который завершится успешно с помощью 200 OK :

HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=A961E0D...; Path=/spring-security-mvc-digest-auth/; HttpOnly
WWW-Authenticate: Digest realm="Contacts Realm via Digest Authentication", qop="auth", 
  nonce="MTM3MzYzODgyOTczMTo3YjM4OWQzMGU0YTgwZDg0YmYwZjRlZWJjMDQzZWZkOA=="
Content-Type: text/html;charset=utf-8
Content-Length: 1061
Date: Fri, 12 Jul 2013 14:15:29 GMT

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=55F996B...; Path=/spring-security-mvc-digest-auth/; HttpOnly
Content-Type: text/html;charset=ISO-8859-1
Content-Language: en-US
Content-Length: 90
Date: Fri, 12 Jul 2013 14:15:29 GMT





	

This is the homepage

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

4. Зависимости Maven

Зависимости безопасности подробно обсуждаются в учебнике Spring Security Maven . Короче говоря, нам нужно будет определить spring-security-web и spring-security-config как зависимости в вашем pom.xml .

5. Заключение

В этом учебнике мы вводим безопасность в простой проект Spring MVC, используя поддержку дайджест-аутентификации в рамках.

Реализацию этих примеров можно найти в проекте Github – это проект на основе Eclipse, поэтому его должно быть легко импортировать и запускать как есть.

Когда проект выполняется локально, html-код домашней страницы может быть доступен по адресу (или, при минимальной конфигурации Tomcat, на порту 80):

http://localhost:8080/spring-security-mvc-digest-auth/homepage.html

Наконец, нет никаких причин , по которым приложение должно выбирать между базовой и дайджест – аутентификацией – оба могут быть настроены одновременно в одной и той же структуре URI таким образом, чтобы клиент мог выбирать между двумя механизмами при использовании веб-приложения.