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

Базовая аутентификация Spring Security

Настройте базовую аутентификацию весной – конфигурацию XML, сообщения об ошибках и пример использования защищенных URL-адресов с помощью curl.

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

1. Обзор

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

Дальнейшее чтение:

Автоматическая настройка безопасности весенней Загрузки

Поставщик проверки подлинности Spring Security

Вход в форму безопасности Spring

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

Мы можем настроить безопасность Spring с помощью конфигурации Java:

@Configuration
@EnableWebSecurity
public class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

    @Autowired
    private MyBasicAuthenticationEntryPoint authenticationEntryPoint;

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
          .withUser("user1").password(passwordEncoder().encode("user1Pass"))
          .authorities("ROLE_USER");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
          .antMatchers("/securityNone").permitAll()
          .anyRequest().authenticated()
          .and()
          .httpBasic()
          .authenticationEntryPoint(authenticationEntryPoint);

        http.addFilterAfter(new CustomFilter(),
          BasicAuthenticationFilter.class);
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

Здесь мы используем элемент http Basic() для определения базовой аутентификации внутри метода configure() класса, расширяющего WebSecurityConfigurerAdapter.

То же самое можно было бы сделать и с помощью XML:



    
    



    
        
            
        
    

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

В web.xml о веб-приложении, обеспечивающем безопасность Spring, уже говорилось в руководстве по выходу из системы Spring .

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

Команда curl -это наш основной инструмент для использования защищенного приложения.

Во-первых, давайте попробуем запросить /homepage.html без предоставления каких-либо учетных данных безопасности:

curl -i http://localhost:8080/spring-security-rest-basic-auth/api/foos/1

Мы возвращаем ожидаемый 401 Несанкционированный и Вызов аутентификации :

HTTP/1.1 401 Unauthorized
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=E5A8D3C16B65A0A007CFAACAEEE6916B; Path=/spring-security-mvc-basic-auth/; HttpOnly
WWW-Authenticate: Basic realm="Spring Security Application"
Content-Type: text/html;charset=utf-8
Content-Length: 1061
Date: Wed, 29 May 2013 15:14:08 GMT

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

Теперь давайте запросим тот же ресурс – домашнюю страницу – но предоставим учетные данные для доступа к нему:

curl -i --user user1:user1Pass 
  http://localhost:8080/spring-security-rest-basic-auth/api/foos/1

Теперь ответ от сервера 200 ОК вместе с файлом cookie :

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=301225C7AE7C74B0892887389996785D; Path=/spring-security-mvc-basic-auth/; HttpOnly
Content-Type: text/html;charset=ISO-8859-1
Content-Language: en-US
Content-Length: 90
Date: Wed, 29 May 2013 15:19:38 GMT

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

4. Дальнейшая конфигурация – Точка входа

По умолчанию точка BasicAuthenticationEntryPoint , предоставленная Spring Security, возвращает клиенту полную страницу для 401 несанкционированного ответа. Это HTML-представление ошибки хорошо отображается в браузере, но оно плохо подходит для других сценариев, таких как REST API, где может быть предпочтительным представление json.

Пространство имен также достаточно гибко для этого нового требования – для решения этой проблемы – точка входа может быть переопределена:

Новая точка входа определяется как стандартный компонент:

@Component
public class MyBasicAuthenticationEntryPoint extends BasicAuthenticationEntryPoint {

    @Override
    public void commence(
      HttpServletRequest request, HttpServletResponse response, AuthenticationException authEx) 
      throws IOException, ServletException {
        response.addHeader("WWW-Authenticate", "Basic realm="" + getRealmName() + """);
        response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
        PrintWriter writer = response.getWriter();
        writer.println("HTTP Status 401 - " + authEx.getMessage());
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        setRealmName("Baeldung");
        super.afterPropertiesSet();
    }
}

Записывая непосредственно в HTTP-ответ, мы теперь полностью контролируем формат тела ответа.

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

Зависимости Maven для безопасности Spring уже обсуждались ранее в статье Безопасность Spring с помощью Maven – нам понадобятся как spring-security-web , так и spring-security-config , доступные во время выполнения.

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

В этом примере мы защитили приложение MVC с помощью Spring Security и базовой аутентификации. Мы обсудили конфигурацию XML и использовали приложение с помощью простых команд curl. Наконец – то взял под контроль точный формат сообщения об ошибке-перешел со стандартной страницы ошибок HTML на пользовательский текст или формат JSON.

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

Когда проект выполняется локально, к образцу HTML можно получить доступ по адресу:

http://localhost:8080/spring-security-rest-basic-auth/api/foos/1 .