본문 바로가기

JWT6

Spring Security [2] - 예외 처리 AuthenticationEntryPoint & AccessDeniedHandler 서큐리티를 도입하며 인증, 인가의 과정을 마쳤다. 이제 인증 및 인가 작업에서 발생하는 예외에 대해서 처리를 해주어야 하는데, 한 가지 생각해봐야 하는 문제가 있다. 스프링 서큐리티는 필터에 기반한 체이닝 구조이므로, 스프링 컨테이너까지 요청이 도달하지 않는다. 따라서, @ExceptionHandler를 통한 편한 예외 처리가 불가하다. 직접 Try - catch로 잡아서 응답을 내려주는 방법 밖엔 없다. 하지만, 스프링 서큐리티가 그렇게 허술하진 않다. 서큐리티 필터 체인의 구조를 보면 마지막 즈음에 예외를 처리하는 필터가 있는 것을 확인할 수 있다. 여기서 주로 사용하는 AuthenticationEntryPoint와 AccessDeniedHandler를 구현해 인증 및 인가 과정에서 일어난 예외에 대.. 2022. 8. 21.
Spring Security [1] - JWT를 이용한 REST API 인증과 인가 기존 인증은 JWT를 이용한 필터로, 인가는 인터셉터로 애노테이션을 정의해 손수 구현했었다. 이번에 리팩터링을 하면서, 스프링이 제공하는 보안 관련 프레임워크인 서큐리티를 사용해보자는 결정을 내려 도입하게 되었다. 어렵다고는 얼핏 들었지만, 이렇게 오래 걸릴 줄 몰랐다. 여러 블로그들을 참조하고, 잘 읽히지도 않는 공식문서들을 보아도 도무지 이해가 가지 않았다. 일단 머릿속에 그려져야 감이 잡히는데, 이건 뭐 필터도 여러 개이며 구현체도 왜 이렇게 많은지 그에 맞는 책임과 역할이 도저히 감이 오지 않는다. 전부 추상화 되어 있어 커스텀해서 사용하기는 편하게 되었다는데, 전반적으로 모든 내용을 이해하기엔 쉽지 않기도 하고 따로 공부가 필요한 프레임워크라고 생각한다. 거진 1주 반이 넘어서야 내가 구현하고자.. 2022. 8. 18.
리팩터링 「Authentication(인증)」 태어나서 처음 회사에 지원했다. 서류를 여러 군데 넣었다. 벌써 서류 탈락만 3번째이다. 서류 탈락이 이런 기분이구나...ㅎㅎ 회사 기준에 부합하지 않는 내 실력과 결과물 탓이지 뭐. 더 열심히 다듬어야겠다. 서류를 다듬다가 인증과 인가 구현 중 이슈를 작성했던 부분이 눈에 띄었다. 인증과 인가... 음... 인가는 애노테이션을 이용해 인터셉터로 구현한 명확한 근거가 있었다. 인증은 좀 애매했다. JWT 토큰을 인증하는 부분은 굳이 인터셉터까지 도달할 필요가 없다. 그래서 인증 작업을 인터셉터에서 필터로 리팩토링을 진행했다. 필터(Filter)란? HTTP 요청과 응답을 거른 뒤 정제할 수 있는 기능이다. Servlet Container 단에서 동작한다. 스프링 범위 밖에서 처리된다. Dispathcer.. 2022. 7. 11.
2022.05.20 《스프링 부트 권한 처리》 스프링 부트 프로젝트 중이다. jwt를 이용한 인증은 다 끝났고 인가 작업만 남았다. 대부분 스프링 서큐리티를 사용해서 권한 처리를 하는듯하다. 나는 일단 서큐리티를 사용하지 않고 짜고 있기 때문에 고민을 좀 많이 해봤다. 결론을 내리자면 인터셉터를 이용하기로 결심했다. 관리자인지 회원인지 인증이 필요한 작업이든지 중복되는 로직이 너무 많아지므로 이것은 인터셉터에서 컨트롤러로 넘어가기 전에 인가 작업을 해줘야 하는 것이 주된 이유다. 한번 해보자~ => 전반적인 계획 작성 중간 정리 혼자 프로젝트를 해서 인지 속도가 너무 나질 않는다. 생각을 해보았다. 어느 한 기능이든 유지보수가 용이하게 설계하기 때문이라는 생각이 들었다. 가장 시간을 많이 쏟은 부분은 Restful 한 설계 방식과 인증 인가 부분이다.. 2022. 5. 20.
2022.05.14 「JWT 인증」 인증을 구현하기 위해 기존에 사용하던 Session 로그인이 아닌 JWT를 이용하여 인증을 구현했다. 토큰을 처음 사용했다 보니 알아가는데 너무 오래 걸렸다. 무엇보다 나는 스프링 시큐리티를 사용하지 않고 서블릿 필터나 스프링 인터셉터를 이용해 토큰 유효성 검사를 하려고 했어서 더 쉽지 않았던 것 같다. 이번 프로젝트 인증에서 Session을 사용하지 않은 이유는 서버의 규모가 확장될 때의 인증 문제이기 때문인데 JWT를 이용한 인증도 여러 가지가 있기 때문에 나의 프로젝트에 맞는 단계가 어디인지에 상당히 헷갈렸던 한 주였다. 인증 작업을 하며 문제가 생겼던 부분이나 구현한 부분에 대해 정리를 해보겠다. Rest API를 설계할 때 인증은 session 기반이 아닌 토큰 기반으로 하는 것이 더 restf.. 2022. 5. 14.
2022.05.13 「Session과 Token(Jwt) & 인증과 인가」 현재 진행 중인 프로젝트에서 로그인을 진행 중인데 기존에 로그인은 세션으로만 진행했었다. 로그인을 구현하는 방식은 여러 가지라고 배웠는데 그중 세션만 이용해봤기 때문에 토큰을 이용한 인증 경험도 필요하다고 생각을 했다. 그중 내 서비스에 대해 또 서비스 확장성에 대해 확실히 맞는 인증 방식을 결정해야겠다고 생각을 했고, 세션과 토큰의 사용처와 개념에 대해 정리를 해보려고 한다. 인증과 인가 인증(Authentication) 서비스의 사용자가 맞는지 확인하는 과정 대게 로그인하는 과정 인가(Authorization) 인증이 완료된 사용자에게 리소스 접근 가능하도록 사용 권한을 부여하는 작업 액세스가 허용된 데이터 및 해당 데이터로 할 수 있는 모든 작업을 지정함 HTTP의 특성 http는 stateless.. 2022. 5. 13.
반응형