JWT 를 활용한 인증

이광훈·2023년 9월 28일
0

NodeJS

목록 보기
2/3

JWT (JSON Web Token)

JWT 란?

JWT 는 JSON Web Token 의 약자로, JSON 형식의 데이터를 저장하는 토큰이다. JWT 는 3가지 부분으로 구성되어 있는데

  1. 헤더
    • 토큰의 종류와 사용할 해시 알고리즘의 종류를 담는다.
  2. 페이로드 (내용)
    • Claim 이 담겨있다. 여기서 Claim 이란 key-value 형식으로 이뤄진 한 쌍의 정보를 말하는데 토큰을 통해 실제로 주고받는 정보들이 담기는 부분이다.
  3. 시그니처 (서명)
    • 인코딩된 헤더 + '.' + 인코딩된 페이로드 값을 합친 후 비밀키로 해시하여 생성한 후 이 값을 인코딩 한 값을 나타낸다.

위 사진에서 Decoded 의 각 부분 (헤더, 페이로드, 시그니쳐) 을 인코딩해서 합친것이 Encoded 의 결과이고 이를 . 으로 합친것이 왼쪽에 생성된 JWT 토큰이다. 이때 인코딩 방식은 Base-64 url safe 인코딩 방식을 사용한다.

JWT 토큰의 헤더와 페이로드는 인코딩 되어있지만 암호화 되어있는 것은 아니다. 따라서 페이로드에 비밀번호 등 민감한 정보를 담는것은 바람직하지 않다.

JWT 토큰 인증 방식

  1. 클라이언트가 서버로 로그인 요청

  2. 서버는 클라이언트의 인증 정보를 확인해서 정보가 맞으면 access token 과 refresh token 을 발급해서 쿠키에 담아 클라이언트에게 응답한다.

  3. 클라이언트는 매 요청마다 access token 을 헤더에 담아서 인증을 진행한다.

  4. 서버는 해당 access token 을 확인 후, 자신의 서버에서 발급한 token 이 맞으면 접근을 허용하고 응답한다.

  5. 만약 클라이언트가 전달한 access token 이 만료되었을 경우, 서버는 응답에 access token 이 만료되었다는 신호를 보낸다.

  6. 이 경우, 클라이언트는 access token 과 refresh token 을 함께 서버에 헤더에 담아서 전달한다.

  7. 그러면 서버는 이 refresh token 을 확인 후, 새로운 access token 을 전달한다.

  8. 클라이언트는 새로운 access token 으로 다시 인증 요청을 보낸다

profile
허허,,,

0개의 댓글