본문 바로가기
공부/java & Spring

[403 Forbidden error] spring post method (axios post request)

by 고기 2023. 5. 14.

1. axios post request 오류(403 Forbidden error)

2. 해결방법(임시)

3. csrf 비활성화에 대한 논의


 

글 작성하기 앞서 경건한 인사를...

 

스오플은 신이야!!!!!!!!!!!

감사합니다감사합니다감사합니다감사합니다감사합니다감사합니다감사합니다감사합니다

https://stackoverflow.com/questions/50486314/how-to-solve-403-error-in-spring-boot-post-request

 

How to Solve 403 Error in Spring Boot Post Request

I am newbie in spring boot rest services. I have developed some rest api in spring boot using maven project. I have successfully developed Get and Post Api. My GET Method working properly in postm...

stackoverflow.com

 

1. axios post request 오류(403 Forbidden error)

먼저 일의 발단은 로그인 기능을 구현하기 위해 간단히 post method를 만들고 데이터가 받아와지는지 테스트를 하려고 했는데 권한이 없다는 403 forbidden error가 발생했다.

 

html 테스트 페이지는 대충 이런식으로 만들어서 로그인 버튼이 호출하는 함수만 확인해보자.

 

로그인 함수에서는 axios를 사용해서 해당 url으로 요청을 보내고 서버에서 보낸 결과를 출력해주도록 했다.

 

그리고 발생한 403...

 

2. axios post request 403 Forbidden error 오류 임시해결

진짜 굉장히 많은 방법을 시도해봤다.

parameter 순서를 바꿔보기도 하고 기존 parameter에 header를 추가해서 보내보기도 했는데 결국 안됐다.

당연히 axios가 문제일리는 없겠지만... 혹시나해서 ajax, fetch, form도 테스트 해봤지만 똑같은 결과였다.

이 쯤 되면 스프링 톰캣서버 설정에 문제가 있을 것으로 결론을 내고 이제서야 스프링 공식문서를 떠올렸다.

애초에 그걸로 해결이 되었다고 해도 근본적인 해결방법도 아니니까 -ㅅ-

 

아무튼 문서 찾아보기 싫어서 날먹하려고 했는데 좋지 않은 선택이었다는 사실에 뼈가 덜덜 저려온다...

열심히 삽질하고나서 공식문서를 확인해봤다.

https://docs.spring.io/spring-security/site/docs/3.2.x/reference/htmlsingle/html5/#csrf

 

Spring Security Reference

The later parts of this guide provide an in-depth discussion of the framework architecture and implementation classes, which you need to understand if you want to do any serious customization. In this part, we’ll introduce Spring Security 3.0, give a bri

docs.spring.io

 

그렇다네... 대충 이유도 알았고 해결방법도 굉장히 간단해서 코드 한 줄만 추가해주면 된다.

하라는대로 csrf 비활성화를 해주자.

 

config file에 http.csrf().disable()을 추가해줍시다.

그 아래있는 애들은 내 개인적인 http설정이니까 따라할필요 없다.

 

정상적으로 post 요청이 성공했음을 확인할 수 있다.

 

3. CSRF 비활성화에 대한 논의

그건 그렇고... CSRF 옵션을 비활성화 시키는게 적절한지 적절하지 않은지에 대한 논의가 있다.

다만 잘 모르겠지만 일부 특별한 상황을 제외하면 마냥 비활성화를 하는게 적절하지만은 않다는 것 같다.

https://security.stackexchange.com/questions/166724/should-i-use-csrf-protection-on-rest-api-endpoints

 

Should I use CSRF protection on Rest API endpoints?

Quick note: this is not a duplicate of CSRF protection with custom headers (and without validating token) despite some overlap. That post discusses how to perform CSRF protection on Rest endpoints

security.stackexchange.com

 

공식문서에도 CSRF 보호를 사용하는걸 권장하고 있다.

 

보호를 적용하기 위한 방법을 소개하고 있는데 csrf정보가 담긴 <meta> tag를 추가해서 그 정보를 header에 담에 보내기...

내용없이 코드만 띡 던져둔 대부분의 블로그에 나와있는 그거다.

대체 다들 어디서 긁어온건가 싶었는데 이거였네. 

근데 위에서도 말했지만 나는 적어도 이 방법만으로는 안 됐는데... 추가로 설정해줘야 하는게 있는건가?

 

일단 https적용은 개발 요구사항에 없었으니까 임시방편으로 기능 개발이 끝날때까지 csrf를 비활성화하는것으로 하자...

이거는 좀 알아둬야 할 것 같으니 급한 불 끄고 좀 깊숙하게 파보는걸로 합시다.

 

조만간 이어서 쓴다!

댓글