본문 바로가기
정리

JWT (1) 개념 정리

by baau 2023. 5. 31.

JWT 란?

  • JSON Web Token의 약자로, 인증에 필요한 정보들을 암호화시킨 JSON TOKEN을 의미한다.
  • JSON 데이터를 Base64 URL-safe Encode를 통해 인코딩하여 직렬화한 것이고, 토큰 내부에는 개인키를 통한 전자 서명이 포함된다.

 

JWT를 통한 인증 과정

  1. 클라이언트는  로그인 아이디와 패스워드를 입력하여 서버에 로그인 요청
  2. 서버에서 서명된 JWT 토큰을 생성하여 응답 헤더에 저장하여 클라이언트에게 반환
  3. 클라이언트는 응답으로 반환된 JWT 토큰을 사용하여 요청마다 Http Header에 JWT 토큰을 담아서 요청
  4. 서버에서는 Http Request Header의 JWT를 검증하여 토큰이 유효한지 검증 후 요청에 맞는 응답 반환

 

JWT의 구조

  • Header
    • 보통 토큰의 타입이나 전자 서명시 사용된 알고리즘이 사용되었는지 저장
  • Payload
    • Claim이라는 토큰에서 사용할 정보들을 저장
    • 인증 시에 토큰에서 실제로 사용될 정보를 의미
    • Payload에는 암호화가 되어 있지 않기 때문에, 비밀번호와 같은 민감한 정보를 담지 않아야 한다.
  • Signature
    • JWT Signature는 암호화가 되어 있기 때문에, 디코딩을 하더라도 실제 서명부는 나오지 않고, 암호화의 구조만 볼 수 있다.
    • 아래 암호화된 구조를 보면, base64UrlEncode를 사용하여 header와 payload를 암호화한 것을 알 수 있으며, your-256-bit-secret로 서버가 가지고 있는 개인키를 통해 암호화되어 있음을 알 수 있다.
    • 서버가 가지고 있는 개인키를 통해 암호화가 되어 있기 때문에 외부에서는 Signature를 복호화할 수 없다.

 

JWT 인증 과정

  1. 클라이언트가 Http Request Header에 JWT 토큰을 담아서 서버에게 요청
  2. 서버에서는 Http Request Header에서 JWT 토큰을 추출한다.
  3. 서버가 가지고 있는 개인키를 가지고 JWT의 Signature을 복호화한다.
  4. 복호화한 Signature의 base64UrlEncode(header), base64UrlEncode(payload)가 JWT 토큰의 header, payload와 일치하는지 검증한다.

 

AccessToken과 RefreshToken

  • 위에서 설명한 JWT 토큰은 인증 시 사용되는 AccessToken를 뜻한다.
  • RefreshToken 등장 배경
    • 해커가 JWT AccessToken을 탈취하면 해커는 AccessToken을 사용하여 모든 접근이 가능하다.
    • 이는 AccessToken의 유효 기간을 짧게하여 해결할 수 있다.
    • 하지만 AccessToken의 유효 기간을 짧게 설정하게 되면 사용자 입장에서는 번거롭게 다시 로그인을 해서 AccessToken을 발급받아야 한다.
    • 이를 해결하기 위해 RefreshToken은 인증이 아닌, AccessToken을 재발급해주는 역할을 한다.
    • AccessToken은 인증 처리 역할을 하며, RefreshToken은 AccessToken을 재발급하는 역할을 한다.
  • 동작 과정
    • AccessToken의 유효 기간을 1일, RefreshToken의 유효 기간은 7일
    • AccessToken이 1시간이 지나 만료 후 클라이언트가 요청을 보낼 때, 서버에서는 RefreshToken 검증 단계에 진입한다.
    • RefreshToken이 유효하다면,  서버는 AccessToken을 발행하여 클라이언트에게 전달하고, 클라이언트는 해당 AccessToken을 받아 재요청을 한다.
    • 따라서 사용자는 1시간이 지나도 재로그인을 할 필요 없다.
    • RefreshToken는 클라이언트가 아닌 서버 DB에 저장되기 때문에 해커의 탈취 위험이 적다.?????