728x90
상황
평범하게 인증 -> JWT 발급 -> API request -> JWT 기반으로 인가 하는 서비스다.
내가 원한 것은 Filter 에서 JWT validate를 진행한 후, JWT가 유효하지 않으면 401 Unautorized 를 띄우는 것이었다.
그런데 분명 JWT validate가 False가 나오는데도 request가 정상적으로 수행되는 문제가 발생했다.
원인
알고보니, 내가 SecurityConfig 에서 이렇다할 인가로직을 작성하지 않아서, 당연하게도 모든 request가 별 문제 없이 수행되었던 것이었다.
// SecurityConfig.java
@Override
protected void configure(HttpSecurity security) throws Exception
{
security
.csrf().disable()
.httpBasic()
.and()
// 여기서부터 인가 로직
.authorizeRequests()
.antMatchers("/swagger-ui/", "/accounts/signup", "/accounts/signin")
.permitAll() // 이 uri 들은 전부 ok
.antMatchers("/courses")
.access("isAuthoticated()") // 이 uri는 SecurityContext에 인증 객체가 있어야 ok
.anyRequest().authenticated(); // 나머지는 인증을 요구한다
security
.addFilterBefore(jwtRequestFilter(), UsernamePasswordAuthenticationFilter.class);
security
.exceptionHandling()
.authenticationEntryPoint(authEntryPoint);
}
이 간단한 생각을 왜 못했는고 하니, 바로 이녀석 때문이었다.
security.
csrf.disable()
csrf가 enable 일 때는 403 fobbiden이 발생했었는데, 이때의 기억이랑 섞여서, 내가 Spring Security 기본 설정을 잘못 건드렸다고 생각한 것이다. (csrf로 발생하는 403은 csrf 검사 결과로 나오는 것이기 때문에, 여기서 403이 발생하면 Filter고 JWT고 검사 하지도 않고 바로 403이 날아간다. 그래서 401이 아닌 403이 날아가는 것이다.)
'삽질기록 > 이유를 아는' 카테고리의 다른 글
curl 파일 업로드하기 (0) | 2020.08.23 |
---|