1. 문제 상황

클라이언트가 요청한 HTTP 헤더의 Cookie에서 JWT를 추출하는 과정에서 문제가 발생했습니다.
기존 코드는 Cookie 값만 JWT로 가정했으나, 실제로 여러 쿠키가 함께 전송되면서 올바르게 JWT를 추출하지 못하는 상황이 발생했습니다.

  • 예상된 결과: JWT 값을 올바르게 추출해 인증을 처리해야 함.
  • 실제 결과: JWT 값이 추출되지 않고, 인증 실패로 인해 401 에러가 반환됨.


2. 문제 원인

문제의 코드

기존 코드는 Cookie 헤더의 첫 번째 값만 확인하고, 그것이 jwt=로 시작한다고 가정했습니다. 이로 인해 JWT가 올바르게 추출되지 않았습니다.

image

image

위와 같이 여러 쿠키가 포함된 경우, bearerToken.startsWith("jwt=") 조건이 false로 평가됩니다.
결과적으로 JWT 값이 추출되지 않고 null이 반환되어 인증에 실패합니다.


3. 해결 방법

1) 문제 해결 코드

각 쿠키를 ;로 분리한 뒤 jwt=로 시작하는 값을 찾아 추출했습니다.

image

2) 코드 동작 방식

(2) ;로 분리된 각 쿠키를 순회하며 jwt=로 시작하는 값을 찾음.
(3) jwt= 이후의 값을 반환.
(4) JWT 값이 없을 경우 null 반환.


4. 최종 결과

수정 후 동작

위 코드를 적용하면, Cookie 헤더에 있는 jwt= 쿠키를 정확히 찾아서 JWT 값을 추출할 수 있습니다.
이 방식은 모든 쿠키를 순회하며 jwt=로 시작하는 값을 찾기 때문에 JWT 위치와 상관없이 올바르게 처리됩니다.


5. 결론

  • 문제원인
    • Cookie 헤더에서 jwt=토큰값 형식이었기에 jwt= 시작하는 값을 찾을 것으로 착각.
    • 실제로는 Cookie 헤더에는 많은 값들이 나열된 형식.
    • 이전에 구성한 코드는 헤더에서 jwt=가 시작하면 이라고 작성했기에, 첫번째 쿠키 값만 확인하고 null 출력함.
    • 이때까지 공교롭게도 jwt가 항상 상단에 나와서 늦게 오류를 발견한 것이라 추정함.
  • 해결 방법: ;로 쿠키를 분리하고, 정확하게 jwt=로 시작하는 값을 찾아 추출하도록 수정.