복붙노트

[SPRING] 스프링 보안 permitAll은 토큰이 유효하지 않은 경우 승인 헤더에서 전달 된 토큰을 고려하고 401을 반환합니다.

SPRING

스프링 보안 permitAll은 토큰이 유효하지 않은 경우 승인 헤더에서 전달 된 토큰을 고려하고 401을 반환합니다.

내 프로젝트에서 봄 보안 oauth를 사용하고 있습니다. 나는 봄 보안 ResourceServerConfigurerAdapter에서 구성하여 인증으로부터 일부 URL을 제외하려고한다. http.authorizeRequests (). antMatchers (url) .permitAll ()을 추가했습니다.

자, 제가보기에는 인증 헤더를이 URL에 전달하지 않으면 인증되지 않은 것입니다. 그리고 API가 제대로 호출됩니다.

호출이 Authorization 헤더로 이루어진 경우 토큰의 유효성을 검사하고 토큰이 확인되지 않으면 호출에 실패합니다.

내 질문에 내가 할 permitAll 가지고있는 요청에 토큰이 무시되도록 할 수 있습니다.

해결법

  1. ==============================

    1.Spring OAuth2는 Authorization Bearer xxx라는 헤더를 가진 모든 URL을 인터셉트합니다.

    Spring OAuth2는 Authorization Bearer xxx라는 헤더를 가진 모든 URL을 인터셉트합니다.

    URL을 가로 채기에서 Spring OAuth2를 피하려면. 나는 Spring OAuth2 설정보다 더 높은 질서를 가진 SecurityConfiguration을 만들었다.

    @Configuration
    @EnableWebSecurity
    @Order(1) // this is important to run this before Spring OAuth2 
    public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    
        @Override
        @Bean
        public AuthenticationManager authenticationManagerBean() throws Exception {
            return super.authenticationManagerBean();
        }
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            List<RequestMatcher> requestMatchers = new ArrayList<RequestMatcher>();
            // allow /api/public/product/** and /api/public/content/** not intercepted by Spring OAuth2
            requestMatchers.add(new AntPathRequestMatcher("/api/public/product/**"));
            requestMatchers.add(new AntPathRequestMatcher("/api/public/content/**"));
    
        http
            .requestMatcher(new OrRequestMatcher(requestMatchers))
        .authorizeRequests()
          .antMatchers("/api/public/product/**", "/api/public/content/**").permitAll()
        }
    }
    

    위의 설정은 Spring OAuth2가 아닌이 설정이 /Opi/public/content/ **와 / api / public / content / **를 처리하도록 허용합니다.

    따라서 잘못된 토큰을 API 위의 호출로 설정해도 잘못된 액세스 토큰이 발생하는 것은 아닙니다.

  2. ==============================

    2.spring-oauth2 문서 https://projects.spring.io/spring-security-oauth/docs/oauth2.html에 따라

    spring-oauth2 문서 https://projects.spring.io/spring-security-oauth/docs/oauth2.html에 따라

    주 : 권한 서버가 자원 서버이기도하면 API 자원을 제어하는 ​​우선 순위가 낮은 다른 보안 필터 체인이 있습니다. 액세스 토큰으로 보호해야하는 요청에 대해서는 사용자가 직접 처리하는 주요 필터 체인의 경로와 일치하지 않는 경로가 필요하므로 위의 WebSecurityConfigurer에서 비 API 리소스 만 선택하는 요청 일치자를 포함해야합니다.

    따라서 ResourceServerConfig보다 높은 순서로 WebSecurityConfigurer 구현을 정의하십시오.

  3. from https://stackoverflow.com/questions/36296869/spring-security-permitall-still-considering-token-passed-in-authorization-header by cc-by-sa and MIT license