상현에 하루하루
개발자의 하루

[짧] JWT

( 업데이트: )

🤔 무엇을

프론트앤드(FrontEnd)의 도메인 a
API를 요청하는 서버의 도메인은 b

FE에서 b로 post request를 요청하였을때 서버에서 set-cookie를 적용하면 크롬은 쿠키가 남는데 사파리는 남지 않는다.

👉 브라우저 쿠키 정책일 가능성이 매우 높습니다.
쿠키 라는것 자체가 원래 브라우저에서 관리하는 것이다 보니 브라우저 별 이슈가 있을 수 있고 없을 수도있다. 그래서 jwt를 쓰는 경우가 많다.

jwt를 쓰느냐 쿠키를 쓰느냐는 의견이 나뉜다.

브라우저의 쿠키를 사용하면 정보자체의 저장과 처리 그리고 보안을 브라우저에 떠넘겨서 개발이 편하다.
하지만 그 만큼 브라우저 디펜던시에 영향을 받을 수 밖에 없다.

jwt는 쿠키로 저장했다가 비교하고 만료되면 갱신하고 하는 것 아니었나…?

하지만 결국 못막기 때문에 짧은 생명주기를 가지게해서 쿠키로 만든다.

리프레시는 디비에 저장한다.

  1. 일단 토큰 > api > 유효성 체크(성공시) > api 처리
  2. 일반 토큰 > api > 유효성 체크(실패시) > 디비에서 리프레시 토큰을 꺼내옴 > 유효성 체크 > 새 토큰 발급 > api 재요청 > api 처리

유효성이란게 토큰이 정상적인 것도 판단하지만 만료 기간도 체크

jwt 레퍼런스 상에 보안문서는 절대 담지 못하게 되어있다.
access token 같은 민감 정보는 절대 못담게 한다.

그래서 보통은 JWT는 현재 유저가 유효한지에 대한 인증만 하는게 맞다.

민감 정보는 숨긴다.

만약? JWT에 민감 정보를 담으려먼 자체 암호화나 JWE같은 암호화 라이브러리를 사용 JWT 관련해서는 쿠키 or 스토리지에 저장해도 상관없다.

JWT의 생명주기는 짧게 하는것이 맞다.
JWT는 한번 발급 되면 서버 단에서 폐기 불가능해서 생명주기를 짧게 하는 것이 맞는 말입니다.