본문 바로가기

IT용어

JWT ( Json Web Token ) 이란?

목차

 

1. JWT 란?

 

2. JWT 구성요소

 

3. JWT 장단점

 

4. JWT 인증 방식

 

5. Access Token / Refresh Token


JWT 란?

 

JWT는 "JSON Web Token"의 약자로,

 

웹 및 애플리케이션 간에 정보를 안전하게 전송하기 위한 표준화된 방법 중 하나입니다.

 

JWT는 클레임(claim) 기반의 토큰이며, 토큰 안에는 JSON 형식으로 데이터가 포함되어 있습니다.

 

이 토큰은 서버와 클라이언트 간의 정보 교환에 사용되며, 주로 사용자 인증 및 권한 부여에 활용됩니다.


JWT 구조

 

JWT 는 Header, Payload, Signature 세 부분으로 구성되어있으며,

 

각 부분은 . 을 기준으로 나누어져 있으며,

 

Json 형태로 Base64 URL 인코딩 되어 있습니다.

 

해당 이미지는 https://jwt.io/ 에서 가져왔습니다.

 

Encoded 좌측부터 Header, Payload, Signature 입니다.

 

 

Header

 

 

토큰의 유형 및 해싱 알고리즘 등의 메타데이터를 담고 있습니다.

 

{
    alg : 서명 암호화 알고리즘(ex: HMAC SHA256, RSA)
    typ : 토큰 유형
}

 

Payload

 

 

실제로 전송하려는 정보를 포함하고 있습니다.

 

Payload 는 세 가지 유형으로 나뉩니다.

 

1. 등록된 클레임(Registered Claims) : 토큰에 대한 몇 가지 표준 클레임으로, 선택적으로 사용할 수 있습니다.

    iss (issuer: 발행자)

    iss(issuer; 발행자),

    exp(expireation time; 만료 시간),

    sub(subject; 제목),

    iat(issued At; 발행 시간),

    jti(JWI ID)

 

2. 공개 클레임(Public Claims) : 사용자 정의 클레임으로, 서버와 클라이언트 간 협의된 데이터를 담습니다.

 

3. 비공개 클레임(Private Claims) : 서버와 클라이언트 간에 협의된 비밀 정보를 담습니다.

 

Signature

 

토큰의 유효성을 검증하기 위한 서명이 포함되어 있습니다.

 

서명은 헤더와 클레임, 비밀 키를 사용하여 생성됩니다.

 

Header와 Payload는 단순히 인코딩된 값이기 때문에 제 3자가 복호화 및 조작할 수 있지만,

Signature는 서버 측에서 관리하는 비밀키가 유출되지 않는 이상 복호화할 수 없다.

따라서 Signature는 토큰의 위변조 여부를 확인하는데 사용된다.

 


JWT 장단점

 

JWT 장점

  1. Header와 Payload를 가지고 Signature를 생성하므로 데이터 위변조를 막을 수 있다.
  2. 인증 정보에 대한 별도의 저장소가 필요없다.
  3. JWT는 토큰에 대한 기본 정보와 전달할 정보 및 토큰이 검증됬음을 증명하는 서명 등 필요한 모든 정보를 자체적으로 지니고 있다.
  4. 클라이언트 인증 정보를 저장하는 세션과 다르게, 서버는 무상태(StateLess)가 되어 서버 확장성이 우수해질 수 있다.
  5. 토큰 기반으로 다른 로그인 시스템에 접근 및 권한 공유가 가능하다. ( 쿠기와 차이 )
  6. OAuth의 경우 Facebook, Google 등 소셜 계정을 이용하여 다른 웹서비스에서도 로그인을 할 수 있다.
    모바일 어플리케이션 환경에서도 잘 동작한다. ( 모바일은 세션 사용 불가능 )

JWT 단점

  1. Self-contained : 토큰 자체에 정보를 담고 있으므로 양날의 검이 될 수 있다.
  2. 토큰 길이 : 토큰의 Payload에 3종류의 클레임을 저장하기 때문에, 정보가 많아질수록 토큰의 길이가 늘어나 네트워크에 부하를 줄 수 있다.
  3. Payload 인코딩 : payload 자체는 암호화 된 것이 아니라 BASE64로 인코딩 된 것이기 때문에, 중간에 Payload를 탈취하여 디코딩하면 데이터를 볼 수 있으므로, payload에 중요 데이터를 넣지 않아야 한다.
  4. Store Token : stateless 특징을 가지기 때문에, 토큰은 클라이언트 측에서 관리하고 저장한다. 
    때문에 토큰 자체를 탈취당하면 대처하기가 어렵게 된다.

 


JWT 인증 방식

 

 

 유저                                                                                       서버

1. 사용자가 로그인 시도

   →

 

  2. 로그인 성공시 JWT 발행

     ←

 

   3. JWT 를 사용하여 API 요청

   

 

          4. 토큰에 이상이 없으면 요청 응답

     ←

 

 

          5. 토큰 만료 또는 이상 시 리프레시 토큰으로 토큰 재발급

 


 

Access Token / Refresh Token

 

JWT 는 제 3자에게 탈취 위험성이 있기 때문에 그대로 사용하지 않고,

 

Access Token, Refresh Token 으로 이중으로 나누어 인증을 하는 방식 취한다.

 

Access TokenRefresh Token 은 둘다 JWT이다.

 

Access Token 은 클라이언트가 가지고 있으며, Refresh Token 은 데이터베이스에 저장한다.

 


참조

https://jwt.io/

https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-JWTjson-web-token-%EB%9E%80-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC