문제 상황
Postman에서 로그인 후 발급받은 accessToken을 사용해 유저 게임 라이브러리 추가 API를 호출했지만 403 Forbidden 오류가 발생했다. 다른 API는 정상적으로 동작하는 상황이었다.
확인 과정
SecurityConfig 확인
- 해당 API가 인증이 필요한 API인지 확인했다.
- .anyRequest().authenticated()로 설정되어 있어 로그인된 사용자만 접근할 수 있는 구조임을 확인했다.
Controller에서 인증 사용자 확인
- @AuthenticationPrincipal SecurityUser user가 정상적으로 주입되는지 확인하기 위해 user를 출력했다.
- user가 출력되지 않아 JWT 인증 과정에 문제가 있다고 판단했다.
JWT 인증 필터 확인
- JwtAuthenticationFilter가 정상적으로 실행되는지 확인했다.
- 필터는 실행되지만 validateToken() 내부의 검증을 통과하지 못하고 있음을 확인했다.
JWT 검증 과정의 예외 확인
- 기존에는 validateToken()에서 JWT 관련 예외를 false로 처리하고 있어 정확한 원인을 알 수 없었다.
- 예외를 출력하도록 수정한 후 MalformedJwtException이 발생하는 것을 확인했다.
요청에 전달되는 JWT 확인
- 필터에서 전달받은 토큰을 .으로 분리해 JWT의 구조를 확인했다.
- 정상적인 JWT는 Header.Payload.Signature의 3부분으로 구성되지만, API 요청에서는 token parts = 2가 출력되었다.
- 반면 로그인 과정에서 생성되는 accessToken은 3 parts로 정상임을 확인했다.
JJWT 의존성 확인
- JWT 라이브러리 문제인지 확인하기 위해 JJWT 의존성을 확인했다.
- jjwt-api, jjwt-impl, jjwt-jackson이 모두 0.12.6으로 동일하여 의존성 버전 문제는 아닌 것을 확인했다.
Postman 변수 확인
- accessToken을 직접 입력하면 해당 API가 정상적으로 동작하지만 {{accessToken}} 변수를 사용하면 403이 발생하는 것을 확인했다.
- 로그인 직후 저장된 Collection 변수는 3 parts였지만, 라이브러리 API 요청 시 5 parts로 확인되었다.
- 이를 통해 Spring Security나 JWT 생성 코드보다는 Postman에서 accessToken 변수가 요청 과정에서 다른 값으로 사용되거나 덮어써지는 문제로 범위를 좁혔다.
envrionment로 변경
- 정상적으로 API가 동작하는 다른 팀원의 Postman 설정과 비교해보니 해당 팀원은 Variables가 아닌 Environment를 사용하고 있었다. 기존 Variables의 accessToken을 삭제하고 Environment에 accessToken을 추가한 뒤, 토큰 저장 코드를 pm.collectionVariables.set()에서 pm.environment.set()으로 변경했다. 변경 후 Environment에 저장된 accessToken을 사용해 API를 호출하자 정상적으로 동작했다.
'회고 > GameLog 프로젝트' 카테고리의 다른 글
| 2차 프로젝트: GameLog 2일차 (0) | 2026.09.15 |
|---|---|
| 2차 프로젝트: GameLog 1일차 (0) | 2026.09.14 |
댓글