반응형

1. 과제

 Spring Security를 사용하여 비밀번호 암호화 및 인증, 인가를 적용하라.

 

2. 배운점

2.1. JWT RefreshToken과 AccessToken

 인증 시 JWT RefreshToken와 AccessToken을 발급하는 방식을 적용해보았다. RefreshToken은 DB에 저장하였고, AccessToken 만료 시 RefreshToken을 통해 AccessToken을 재발급해주는 기능을 구현하였다.  현재는 AccessToken 만료 시 클라이언트에게 401에러와 Expired 에러를 알려주는데, 이렇게 할 경우 클라가 RefreshToken을 통해 AccessToken을 재발급받는 API를 타야하는 번거로움이 있다. RefreshToken을 세션에 넣어두고 AccessToken이 만료됐을 때 세션에서 RefreshToken을 가져와 AccessToken을 재발급해주는 Filter를 생성한다면 이러한 번거로움을 없앨 수 있을 것 같다.

 

2.2. 어노테이션 기반 인가처리

 이전에는 SecurityConfig 설정 파일 antMatcher.hasRole과 같은 메서드를 사용하여 인가처리를 하였는데,  Controller 메서드에 @PreAuthorize 를 사용하여 인가처리를 하는 방법을 알게되었다. 설정파일에 할 경우 antMatcher.hasRole 메서드의 순서에 따라 본인이 원하는 인가 처리가 되지 않을 수 있는데 반에 이 방식은 보다 명시적인 느낌을 받았다.

 

2.3. JWT + SpringSecurity

  SpringSecurity에  JWT 인증 방식을 적용해보았다. AccessToken와 RefreshToken을 사용한 JWT 인증의 프로세스를 이해하니 폼 인증 방식보다 훨씬 유연하다는 생각이 들었다.

 

3. 느낀점

 RefreshToken, AccessToken을 사용한 JWT 인증, 인가 프로세스, SpringSecurity 설정 파일에 입력했던 CSRF, Session 관련 메서드들의 의미와 사용 이유를 확실히 이해하게 되었다.

 TDD를 위해 테스트 코드를 선 작성하고 로직을 구현하는 것도 훨 자연스러워졌다. 이 기능은 어떤 클래스가 책임져야 할지, 전역객체에 너무 의존하는 로직은 아닌지, 테스트가 어렵진 않을지 생각하며 코드를 작성하는 습관을 갖는게 중요하다는 것도 확실히 느끼게 된 주 차 였다.

 

반응형

+ Recent posts