Springboot Angular security - 403 запрещено на вызовах REST - PullRequest
0 голосов
/ 17 сентября 2018

У нас есть многомодульное приложение Springboot 2.0.x и Angular 6, использующее реализацию OpenID Connect 1.0 стандарта OAuth2 в качестве обеспечения безопасности.Начальная безопасность работает, аутентифицирует и авторизует, и попадает на Домашнюю страницуНо по какой-то причине наши вызовы POST и DELETE REST получают 403 запрещенных кода состояния для аутентифицированных и авторизованных пользователей.GET вызовы не затрагиваются, все еще работает.

Кто-нибудь имеет какие-либо идеи по любой причине для этого?У нас нет ролей, которые фильтруют то, что может сделать любой пользователь.Просто все пользователи, прошедшие аутентификацию и авторизацию, смогут POST, DELETE и GET.

Вот SecurityConfig:

@Override
public void configure(WebSecurity web) throws Exception {
    System.out.println("Error!!/resources/**");
    web.ignoring().antMatchers("/resources/**");
}

@Bean
public OpenIdConnectFilter myFilter() {
    final OpenIdConnectFilter filter = new OpenIdConnectFilter("/auth/sso/callback");
    filter.setRestTemplate(restTemplate);
    return filter;
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    // @formatter:off
    http
    .addFilterAfter(new OAuth2ClientContextFilter(), AbstractPreAuthenticatedProcessingFilter.class)
    .addFilterAfter(myFilter(), OAuth2ClientContextFilter.class)
    .httpBasic().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/auth/sso/callback"))
    // .httpBasic().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/google-login"))
    .and()
    .authorizeRequests()
    .antMatchers("/errorPage").permitAll()
    .anyRequest().authenticated()
    ;
    // @formatter:on
}

POST подпись:

@PostMapping("/spreadsheet/upload/{uploader}/{filename}")
public ResponseEntity<?> uploadSpreadsheet(@RequestBody MultipartFile file, @PathVariable("uploader") String uploader, @PathVariable("filename") String filename) {

УДАЛИТЬ подпись:

@DeleteMapping("/spreadsheet/{uploader}/{filename}")
public ResponseEntity<?> deleteUploadedSpreadsheet(@PathVariable(value = "uploader") String uploader, @PathVariable String filename) {

1 Ответ

0 голосов
/ 18 сентября 2018

нашел виновника, это было связано с CSRF, не знал, что он был настроен и включен по умолчанию. как только мы отключили это, добавив,

 .and().csrf().disable()

в

@Override
protected void configure(HttpSecurity http) throws Exception {
    // @formatter:off
    http
    .addFilterAfter(new OAuth2ClientContextFilter(), AbstractPreAuthenticatedProcessingFilter.class)
    .addFilterAfter(myFilter(), OAuth2ClientContextFilter.class)
    .httpBasic().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/auth/sso/callback"))
    // .httpBasic().authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/google-login"))
    .and()
    .authorizeRequests()
    .antMatchers("/errorPage").permitAll()
    .anyRequest().authenticated()
    .and().csrf().disable()
    ;
    // @formatter:on
}

POST и DELETE снова сработали. но, конечно, это решение отключает эту часть безопасности. но теперь, когда мы знаем, мы просто настроим csrf для работы в приложении без запрета POST и DELETE.

Спасибо

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