Cookie 헤더에서 JWT 추출 오류와 해결 방법
Cookie 헤더에서 JWT 추출 오류와 해결 방법
1. 문제 상황
클라이언트가 요청한 HTTP 헤더의 Cookie
에서 JWT를 추출하는 과정에서 문제가 발생했습니다.
기존 코드는 Cookie
값만 JWT로 가정했으나, 실제로 여러 쿠키가 함께 전송되면서 올바르게 JWT를 추출하지 못하는 상황이 발생했습니다.
- 예상된 결과: JWT 값을 올바르게 추출해 인증을 처리해야 함.
- 실제 결과: JWT 값이 추출되지 않고, 인증 실패로 인해 401 에러가 반환됨.
2. 문제 원인
문제의 코드
기존 코드는 Cookie
헤더의 첫 번째 값만 확인하고, 그것이 jwt=
로 시작한다고 가정했습니다. 이로 인해 JWT가 올바르게 추출되지 않았습니다.
실제 Cookie
헤더 값
위와 같이 여러 쿠키가 포함된 경우, bearerToken.startsWith("jwt=")
조건이 false
로 평가됩니다.
결과적으로 JWT 값이 추출되지 않고 null
이 반환되어 인증에 실패합니다.
3. 해결 방법
1) 문제 해결 코드
각 쿠키를 ;
로 분리한 뒤 jwt=
로 시작하는 값을 찾아 추출했습니다.
2) 코드 동작 방식
(1) Cookie
헤더에서 JWT 값이 포함된 쿠키를 검색.
(2) ;
로 분리된 각 쿠키를 순회하며 jwt=
로 시작하는 값을 찾음.
(3) jwt=
이후의 값을 반환.
(4) JWT 값이 없을 경우 null
반환.
4. 최종 결과
수정 후 동작
위 코드를 적용하면, Cookie
헤더에 있는 jwt=
쿠키를 정확히 찾아서 JWT 값을 추출할 수 있습니다.
이 방식은 모든 쿠키를 순회하며 jwt=
로 시작하는 값을 찾기 때문에 JWT 위치와 상관없이 올바르게 처리됩니다.
5. 결론
- 문제원인
Cookie
헤더에서jwt=토큰값
형식이었기에jwt=
시작하는 값을 찾을 것으로 착각.- 실제로는 Cookie 헤더에는 많은 값들이 나열된 형식.
- 이전에 구성한 코드는 헤더에서
jwt=
가 시작하면 이라고 작성했기에, 첫번째 쿠키 값만 확인하고 null 출력함. - 이때까지 공교롭게도 jwt가 항상 상단에 나와서 늦게 오류를 발견한 것이라 추정함.
- 해결 방법:
;
로 쿠키를 분리하고, 정확하게jwt=
로 시작하는 값을 찾아 추출하도록 수정.