'오늘의 계절, 오늘의 노래' 라는 프로젝트를 진행하면서

JWT방식으로 로그인+회원가입을  프로그래밍을 해보았지만, 

JWT와 친해지지 않아 자세히 알아보기로 해보았다.

 


JWT 는 무엇일까?

JWT는 JSON Web Token의 약자로 전자 서명 된 URL-safe (URL로 이용할 수있는 문자 만 구성된)의 JSON입니다.

 

 

JWS (Jason Web Signature) : JSON을 암호화하여 URL-safe 문자열로 표현한 것

JWE (Jason Web Encryption) : JSON 데이터 구조를 사용하여 암호화 방법

*URL Safe : URL에 포함 할 수 없는 문자를 포함하지 않는 것

 

 

 

JWT 토큰 구성

JWT 토큰 구성은 헤어(header) + 페이로드(payload) + 서명(Signature)로 구성되며,

각 부분은  Base64로 인코딩 되어 표현된다. 

 

헤어(header) : 토큰의 유형 (JWT) +  HMAC, HS256(SHA256) 또는 RSA와 같은 해시 알고리즘을 나타낸다.

페이로드(payload) : 토큰에 담을 (name/value)를 한쌍으로 이룬 클레임(claim)정보를 나타낸다. 
                                   클레임 정보는 등록된 클레임, 공개 클레임, 비공개 클레임으로 나뉜다.

서명(Signature) : secret key를 포함하여 암호화 되어있다.

 

 

JWT Process 

- 클라이언트의 로그인 정보를 서버에 저장하지 않아, 토큰기반 인증 메커니즘을 제공한다.

- 로그아웃 시, 로컬 스토리지 저장된 JWT 데이터를 제거한다.

 

 

 JWT의 적용

  • 회원인증 : JWT의 가장 흔한 방법 
  • 정보교류 : 두 개체 사이에서 안정성있게 정보를 교환하기에 좋은 방법이다.  
                    정보가 서명되어있기 때문에, 보낸이가 바뀌진 않았는지 도중에 조작되지 않았는지 확인할 수 있다.

 

 

JWT 장점  

  • 사용자 인증에 필요한 모든 정보는 토큰 자체에 포함되어 별도 인증 저장소가 필요없다.
  • 디버깅 및 관리가 용이하다.
  • 트래픽 부담이 낮다.    
  • 독립적인 JWT

 

JWT 단점 

  • 더 많은 정보를 입력할수록 토큰이 커져 네트워크 부하를 줄 수 있다. 
  • JWT는 상태를 저장하지 않아 제어가 어렵다. 
  • 임의로 토큰을 삭제할 수 없어 '토큰 만료 시간'을 꼭 넣어주어야 한다.
  • Payload 는 암호화 한 것이 아니기 때문에
  • JWE를 암호화 하거나 Payload에 중요한 데잉터를 넣지 말아야한다.

 

 

 

 

opennaru blog, 'JWT(JSON Web Token) 이해와 활용' 참고하였습니다.

http://www.opennaru.com/opennaru-blog/jwt-json-web-token/

+ Recent posts