Spring Security + JWT + OAuth 2.0 기능을 모두 구현하였으니 마지막으로 테스트를 진행해 봅시다. 테스트를 위한 추가 코드 기존에 JWT 기능을 구현하면서 생성한 'TokenApiController' 클래스에 API 테스트를 위한 메서드를 하나 추가해 줍니다. @RequiredArgsConstructor @RestController public class TokenApiController { ... // api 테스트 추가 @PostMapping("/test") public ResponseEntity testApi() { return ResponseEntity.ok() .body("성공"); } } 제가 하고 있는 사이드 프로젝트는 Frontend(FE) 서버가 인증 서버에 OAu..
앞 포스팅을 통해 JWT 기능 구현을 하였습니다. 이번 포스팅에서는 해당 코드가 제대로 동작하는 지 테스트 코드를 작성해보겠습니다. JWT 테스트(1): TokenProvider 임의로 JWT를 생성하기 위한 mocking 객체인 JwtFactory를 생성합니다. /** * JWT 토큰 서비스를 테스트하기 위한 mocking 용 객체 */ @Getter public class JwtFactory { private String subject = "test@gmail.com"; private Date issuedAt = new Date(); private Date expiration = new Date(new Date().getTime() + Duration.ofDays(14).toMillis()); pri..
JWT를 구현하기에 앞서 JWT의 취약점으로 토큰 탈취 시 유효기간을 만료시키거나 삭제할 수 없다고 했습니다. 이를 보완하기 위해 2개의 토큰을 생성하는 방식을 취하게 되며, 각각 Access Token, Refesh Token이라 합니다. Access Token & Refresh Token 클라이언트가 API를 요청할 때 사용하는 Access Token이라 부르며, 이때 Access Token이 만료가 될 시 재발급을 요청하기 위한 토큰을 Refresh Token이라 합니다. Access Token은 클라이언트가 보관하고, Refresh Token은 서버가 보관합니다. 즉 Refresh Token이 유효하면 서버가 Access Token을 재발급해주는 방식입니다. JWT설정(1): 의존성 설정 및 토큰..
들어가면서 이전 프로젝트를 진행하면서 OAuth 2.0과 Spring Security를 이용한 회원 기능을 구현한 경험이 있습니다. 그러나 여러 블로그 포스팅을 찾아보면서 OAuth 2.0과 JWT, 그리고 Spring Security를 조합하여 더욱 강력한 인증 및 인가 시스템을 구현한 애플리케이션을 많이 보았습니다. 이에 제가 사전에 충분한 지식을 습득하지 못한 상황에서 새로운 프로젝트 도전하게 되었습니다. 세션 기반 인증과 토큰 기반 인증 이전 프로젝트에서 Spring Security는 기본적으로 세션 기반 인증을 제공해주기 때문에 사용자의 정보를 담은 세션을 생성하고 저장해서 인증하는 방식을 사용했었습니다. 이를 세션 기반 인증이라 부르며, 세션에 접근만 하면 사용자의 정보를 쉽게 가져올 수 있다..