Spring Security Digest Аутентификация
1. обзор
Из этого туториала Вы узнаете, как настроить, настроить и настроить дайджест-аутентификацию с помощью Spring. Подобно предыдущемуarticle covering Basic Authentication, мы собираемся построить на основе учебника Spring MVC и защитить приложение с помощью механизма Digest Auth, предоставляемого Spring Security.
2. Конфигурация безопасности XML
Первое, что нужно понять о конфигурации, это то, что, хотя Spring Security действительно имеет полную поддержку механизма дайджест-аутентификации, эта поддержка составляетnot as well integrated into the namespace, как была обычная аутентификация.
В этом случае нам нужно вручнуюdefine the raw beans, которые будут составлять конфигурацию безопасности -DigestAuthenticationFilter иDigestAuthenticationEntryPoint:
Затем нам нужно интегрировать эти компоненты в общую конфигурацию безопасности - и в этом случае пространство имен все еще достаточно гибкое, чтобы позволить нам сделать это.
Первая часть этого указывает на компонент пользовательской точки входа через атрибутentry-point-ref основного элемента<http>.
Вторая часть -adding the newly defined digest filter into the security filter chain. Поскольку этот фильтр функционально эквивалентенBasicAuthenticationFilter, мы используем то же относительное положение в цепочке - это определяется псевдонимомBASIC_AUTH_FILTER в общемSpring Security Standard Filters.
Наконец, обратите внимание, что дайджест-фильтр настроен наpoint to the user service bean - и здесь пространство имен снова очень полезно, поскольку оно позволяет нам указать имя bean-компонента для пользовательской службы по умолчанию, созданной элементом<user-service>:
3. Использование защищенного приложения
Мы собираемся использоватьthe curl command, чтобы использовать защищенное приложение и понять, как клиент может с ним взаимодействовать.
Начнем с запроса домашней страницы -without providing security credentials в запросе:
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
Если этот запрос был отправлен браузером, запрос на проверку подлинности запросит учетные данные, используя простой диалог пользователя / пароля.
Давайте теперьprovide the correct credentials и отправим запрос еще раз:
curl -i --digest --user
user1:user1Pass http://localhost/spring-security-mvc-digest-auth/homepage.html
Обратите внимание, что мы включаем дайджест-аутентификацию для командыcurl с помощью флага–digest.
Первый ответ от сервера будет таким же -401 Unauthorized - но теперь вызов будет интерпретирован и обработан вторым запросом, который завершится успешно с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
Последнее замечание по этому взаимодействию заключается в том, что клиент можетpreemptively send the correct Authorization header с первым запросом и, таким образом, полностьюavoid the server security challenge со вторым запросом.
4. Зависимости Maven
Зависимости безопасности подробно обсуждаются вSpring Security Maven tutorial. Короче говоря, нам нужно будет определитьspring-security-web иspring-security-config как зависимости в нашемpom.xml.
5. Заключение
В этом руководстве мы представляем безопасность в простом проекте Spring MVC, используя поддержку Digest Authentication в платформе.
Реализацию этих примеров можно найти вthe github project - это проект на основе Eclipse, поэтому его должно быть легко импортировать и запускать как есть.
Когда проект выполняется локально, доступ к html домашней странице можно получить (или, с минимальной конфигурацией Tomcat, на порту 80):
Наконец, нет причин, по которым приложению нужно использоватьchoose between Basic and Digest authentication -both can be set up simultaneously on the same URI structure таким образом, чтобы клиент мог выбирать между двумя механизмами при использовании веб-приложения.