JWT 는 JSON Web Token 의 약자로, JSON 형식의 데이터를 저장하는 토큰이다. JWT 는 3가지 부분으로 구성되어 있는데
위 사진에서 Decoded 의 각 부분 (헤더, 페이로드, 시그니쳐) 을 인코딩해서 합친것이 Encoded 의 결과이고 이를 . 으로 합친것이 왼쪽에 생성된 JWT 토큰이다. 이때 인코딩 방식은 Base-64 url safe 인코딩 방식을 사용한다.
JWT 토큰의 헤더와 페이로드는 인코딩 되어있지만 암호화 되어있는 것은 아니다. 따라서 페이로드에 비밀번호 등 민감한 정보를 담는것은 바람직하지 않다.
클라이언트가 서버로 로그인 요청
서버는 클라이언트의 인증 정보를 확인해서 정보가 맞으면 access token 과 refresh token 을 발급해서 쿠키에 담아 클라이언트에게 응답한다.
클라이언트는 매 요청마다 access token 을 헤더에 담아서 인증을 진행한다.
서버는 해당 access token 을 확인 후, 자신의 서버에서 발급한 token 이 맞으면 접근을 허용하고 응답한다.
만약 클라이언트가 전달한 access token 이 만료되었을 경우, 서버는 응답에 access token 이 만료되었다는 신호를 보낸다.
이 경우, 클라이언트는 access token 과 refresh token 을 함께 서버에 헤더에 담아서 전달한다.
그러면 서버는 이 refresh token 을 확인 후, 새로운 access token 을 전달한다.
클라이언트는 새로운 access token 으로 다시 인증 요청을 보낸다