Конфигурация безопасности Spring по умолчанию всегда выдает 401 - PullRequest
0 голосов
/ 23 апреля 2019

Я создаю новое приложение Spring REST с некоторыми базовыми службами и сущностями.

Я добавил Spring Security и без переопределения какого-либо класса, я просто добавил в application.properties имя пользователя и пароль.

Пока все хорошо, я открыл Postman, чтобы опробовать конечную точку, и она всегда возвращает 401 к моим запросам.

Я пытался в почтальоне установить авторизацию через "Basic Auth" (это заголовок WWW-Authenticateспрашивает), попробовал «Digest auth», используя значение «Realm» из заголовка.Но ничего из этого не работает.


Вот что у меня есть в моем application.properties

spring.security.user.name=root
spring.security.user.password=root

Это мой запрос

https://imgur.com/URM3TGD

(извините, я не могу вставить изображение из-за своей репутации)

А вот и конечная точка

@PostMapping("saveUsuario")
public Usuario saveUsuario(Usuario usuario) {
        return usuarioRepository.save(usuario);
}

(если возможно) я неЯ не хочу переопределять любой класс Spring Security, просто «используй как есть».

Спасибо!

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Итак, вот что я нашел.

Благодаря @jzheaux мы обнаруживаем, что проблема была в конфигурации csrf (Использование запроса POST).

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

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {


    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
    }
}

Но тогда конечные точки могут быть вызваны без аутентификации!

Итак, это окончательный код:

@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        http.cors();
        http.authorizeRequests().anyRequest().fullyAuthenticated();
        http.httpBasic();
        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.NEVER);
    }
}
  • Сначала отключите функцию CSRF.
  • Затем включите Cors.
  • Я установил, что хочу, чтобы любой запрос был полностью аутентифицирован
  • Тип вызова - базовый HTTP
  • Я отключаю создание файлов cookie, поэтому он всегда запрашивает учетные данные.

Пока все хорошо, работает!

0 голосов
/ 23 апреля 2019

За https://docs.spring.io/spring-boot/docs/1.5.0.RELEASE/reference/htmlsingle/#boot-features-security

вы должны изменить свой пароль с помощью

security.user.password=root

вместо spring.security.user.password=root

аналогичных свойств безопасности, которыемогут быть переопределены в классе @ConfigurationProperties: SecurityProperties.java

См. https://github.com/spring-projects/spring-boot/blob/v1.5.0.RELEASE/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/SecurityProperties.java

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...