Spring Security Digest Аутентификация

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