CS & SW & IT 용어

[JWT]란 무엇인가

Haksae 2022. 1. 16. 15:56

https://haksae.tistory.com/33

 

#.5 Cookie & Session

1. Cookie란 HTTP 쿠키는 웹 쿠키, 브라우저 쿠키로도 불리는데 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각을 의미한다. 쿠키는 주로 세션 관리( 서버에서 관리하는 로그인 등의 정

haksae.tistory.com

Cookie와 Session에 대한 정리이다. 해당 글 끝에 쿠키 세션에 대한 단점을 기록했다.

* 단점
1. 세션 하이재킹 공격이 가능할 수 있다. 해결책은 HTTPS 를 사용해 요청 자체를 탈취해도 안의 정보를 읽기 힘들게 하거나, 세션에 유효시간을 부여할 수 있습니다.
2. 서버에서 추가적인 저장공간이 필요합니다.서버에서 세션 저장소를 사용하므로 부하가 높아집니다.
 
👉🏻 이를 보완하기위해 Token 기반 인증 방식이 나왔다고 생각하면 되겠다. 해당 글은 토큰 기반 시스템에서 주로 사용하는 JWT(Json Web Token)에 대한 내용을 기술하겠다.

 

1. JWT 이란? 

JWT(Json Web Token)란 Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token이다. 즉 인증에 필요한 정보들을 암호화시킨 토큰이다.
JWT도 세션/쿠키 방식과 유사하게 Access Token을 HTTP 헤더에실어서 서버에 전송한다. 토큰은 임의로 생선된 비밀번호 같이 동작한다. 토큰은 제한된 수명을 가지고 만료되면 다른 새로 생성해야한다.
주로 회원 인증이나 정보 전달에 사용되는 JWT는 아래의 로직을 따라서 처리된다.

  1. 사용자가 로그인을 합니다.
  2. 서버에서는 계정 정보를 읽어 사용자를 확인 후, 사용자의 고유 ID 값을 부여한 후 기타 정보와 함께 Payload 에 집어넣습니다.
  3. JWT 토큰의 유효기간을 설정합니다.
  4. 암호화할 Secret key 를 이용해 Access Token 을 발급합니다.
  5. 사용자는 Access Token 을 받아 저장 후, 인증이 필요한 요청마다 토큰을 헤더에 실어 보냅니다.
  6. 서버에서는 해당 토큰의 Verify Signature 를 Secret key 로 복호화한 후, 조작 여부, 유효기간을 확인합니다.
  7. 검증이 완료되었을 경우, Payload 를 디코딩 하여 사용자의 ID 에 맞는 데이터를 가져옵니다.

2. Session/Cookie와 가장 큰 차이점

세션 / 쿠키는 세션 저장소에 유저 정보를 넣는 반면, JWT 는 토큰 안에 유저의 정보들이 넣어진다는 점 입니다.
클라이언트 입장에서는 HTTP 헤더에 세션 ID 나 토큰을 실어서 보내준다는 점에선 동일하지만,
서버 측에서는 인증을 위해 암호화를 한다 vs 별도의 저장소를 이용한다 의 차이가 발생합니다.

 

3. JWT의 장단점

장점
  1. 간편하다.
    - 세션/쿠키 인증은 별도의 저장소 관리가 필요합니다.
    - JWT 는 발급한 후 검증만 하기 때문에 추가 저장소가 필요하지 않습니다. (StateLess - 상태/정보 저장하지 않음) 이는 서버를 확장하거나 유지, 보수하는데 유리합니다.
  2. 확장성이 뛰어납니다.
    - 토큰 기반으로 하는 다른 인증 시스템에 접근이 가능합니다.
    - Facebook, Google, Microsoft 로그인 등은 모두 토큰 기반으로 인증을 하는데, 권한을 받을 수도, 프로필을 써드파티 웹사이트에 제공하도록 허가 할 수도 있습니다.
단점
  1. 이미 발급된 JWT 에 대해서는 유효기간이 완료될 때 까지는 계속 사용이 가능하다.- 세션/쿠키 인증 방식은 쿠키가 악의적으로 이용될 경우 쿠키를 삭제하면 됩니다.
    - 그러나 JWT 는 유효기간이 지나기 전까지 정보들을 이용할 수 있습니다.
    - 이에 대한 해결책은, Access Token 유효기간을 짧게 하고 Refresh Token 이라는 새로운 토큰을 발급합니다. 그렇게 되면 Access Token 을 탈취당해도 상대적으로 피해를 줄일 수 있습니다.
  2. Payload 정보가 제한적입니다.- 페이로드(Payload) 자체는 암호화 된 것이 아니라, BASE64로 인코딩 된 것이다. 중간에 Payload를 탈취하여 디코딩하면 데이터를 볼 수 있으므로, JWE로 암호화하거나 Payload에 중요 데이터를 넣지 않아야 한다.
  3. JWT 의 길이- JWT 의 길이는 길기 때문에 인증이 필요한 요청이 많아질수록 서버의 자원낭비가 발생합니다.

 

출처 및 참고문서

https://mangkyu.tistory.com/56

https://tofusand-dev.tistory.com/89#%EC%9E%A5%EB%8B%A8%EC%A0%90-1