Spring Security + JWT + OAuth 2.0 기능을 모두 구현하였으니 마지막으로 테스트를 진행해 봅시다.
테스트를 위한 추가 코드
기존에 JWT 기능을 구현하면서 생성한 'TokenApiController' 클래스에 API 테스트를 위한 메서드를 하나 추가해 줍니다.
@RequiredArgsConstructor
@RestController
public class TokenApiController {
...
// api 테스트 추가
@PostMapping("/test")
public ResponseEntity<String> testApi() {
return ResponseEntity.ok()
.body("성공");
}
}
제가 하고 있는 사이드 프로젝트는 Frontend(FE) 서버가 인증 서버에 OAuth 인증 요청을 보내면, 인증 서버는 저희가 구현한 Backend(BE) 서버에 응답을 보내고, 모든 인증 과정을 Backend 서버에서 처리합니다. 그 후, Backend 서버는 JWT 토큰 값을 생성하여 Frontend 서버로 보내는 방식입니다.
그러나 저는 BE 서버로 만 테스트를 진행할 것이기에 OAuth 인증 과정을 마치면 'OAuth2SuccessHandler'에서 "/"로 리디렉션이 되도록 설정해 놓았습니다.
이제 AccessToken을 url 쿼리 파라미터로 받기 위한 임시 페이지 index.html 파일을 생성합니다. "/"은 따로 Controller로 설정된 것이 아니라면 " index"라는 이름을 가진 html 파일을 찾아 리디렉션 해줍니다.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
메인화면입니다.
</body>
</html>
JWT 토큰 생성 및 저장 확인
Spring Security는 기본적으로 로그인 페이지를 제공합니다. 이는 OAuth 로그인 페이지도 마찬가지입니다. 서버를 실행하고 "localhost:8080/login"에 접속하면 Spring Security가 제공하는 기본 로그인 페이지가 표시됩니다.
원하는 소셜 로그인을 진행하시면 미리 생성해 두었던 index.html 페이지로 리디렉션 됩니다. AccessToken은 리디렉션 되어 url 쿼리 파라미터에 추가되어 있어야 합니다. 토큰 값이 제대로 생성되어 있는지 확인합니다.
AccessToken이 정상적으로 생성된 것을 확인하였으니, 이후 API 테스트를 위해 따로 보관해 둡시다.
RefreshToken은 쿠키와 DB에 저장되어 있어야 합니다. 저는 쿠키를 크롬 개발자 도구를 통해 확인하고, DB는 H2 콘솔로 확인하였습니다.
JWT 토큰 API 요청 테스트
AccessToken과 RefreshToken이 생성되는 것을 확인하였으니 잘 작동하는지 테스트해 보겠습니다. API 테스트는 Postman으로 진행합니다.
먼저 AccessToken을 통해 API 요청이 정상처리되는지 확인합니다.
Header에 "Authorization"을 추가하고 접두사 "Bearer "을 포함하여 AccessToken을 넣습니다.
요청을 보내면 다음과 같이 Http 상태 코드 200과 "성공"이 응답되면 성공입니다.
이번에는 RefreshToken으로 AccessToken이 재발급되는지 확인해 봅니다. AccessToken 재발급 요청은 Body에 RefreshToken을 넣어 요청하면 됩니다.
요청을 보내면 다음과 같이 Http 상태코드 201과 AccessToken이 응답되면 성공입니다.
마지막으로
드디어 Spring Security와 JWT, OAuth 2.0 기능을 성공적으로 구현했습니다! 여러분들과 함께하는 이 과정은 처음 JWT 토큰을 사용하여 OAuth를 구현하는 것이어서 걱정도 많았고, 여러 부분을 놓칠까 봐 걱정도 되었지만, 시간이 지남에 따라 그만큼 의미 있는 경험이 되었습니다.
여러 블로그를 찾아보며 여러 시행착오를 겪었지만, Spring Security 6.1 버전 이상에 대한 자세한 내용이 부족해 어려움을 겪었습니다. 이러한 상황에도 포기하지 않고 계속해서 삽질한 결과... 성공적으로 프로젝트를 완성할 수 있었던 것 같습니다. 지금까지 긴 글을 읽어주셔서 감사합니다.
'Spring > Spring Security' 카테고리의 다른 글
Spring Security + JWT + OAuth 2.0 회원 기능(7) - OAuth 2.0 기능 구현 (0) | 2024.03.12 |
---|---|
Spring Security + JWT + OAuth 2.0 회원 기능(6) - Spring Security 설정 (0) | 2024.03.12 |
Spring Security + JWT + OAuth 2.0 회원 기능(5) - OAuth 2.0 인증 서버 등록 (0) | 2024.03.11 |
Spring Security + JWT + OAuth 2.0 회원 기능(4) - OAuth 2.0 개념 (1) | 2024.03.11 |
Spring Security + JWT + OAuth 2.0 회원 기능(3) - JWT 테스트 코드 (0) | 2024.03.11 |