Автор оригинала: 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 GMTThis 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 таким образом, чтобы клиент мог выбирать между двумя механизмами при использовании веб-приложения.