[JWT] JWT Token 정리

2021. 12. 14. 01:41Spring Boot/Information

JWT (Json Web Token)

  • 다양하고 많은 프로그래밍 언어에서 지원하고 있다.(주류 언어는 대부분 지원)
  • 자가 수용적인 특성을 지니고 있다.
    → 필요한 모든 정보를 자체적으로 지니고 있음
    (기본정보 : 발급일자, 유효일자 등 / 전달정보 : 이를테면 로그인 정보 / 시그니쳐 : 검증을 위해 사용)
  • 쉽게 전달 가능하다.
    → Header로 전달 가능하고, Header에 넣어 OAuth 적용이 가능함.
    QueryParams로도 넘길 수 있으나, 보안상 대부분 Header에 넣어 넘기고 있음.

 

언제 쓸까?

  • 주로 로그인시, 보안이 중요한 데이터를 주고 받을 때 사용함.
    (예: 유저가 로그인 진행 → 서버에서 유저 정보를 기반으로 JWT Token 발급 → 유저가 서버 요청시 Token을 전달 → 서버에서 Token이 유효한지 Validation Check 및 요청한 작업에 권한이 있는지 확인 → 모두 통과되면 요청한 작업에 대해 처리)

왜 쓸까?

  • 서버에서 Session을 유지할 필요가 없음.
    → 즉, Token을 검증하고 Payload를 해석하면 사용자가 누구인지를 알 수 있기 때문에 서버 Cost를 줄일 수 있음.

생김새

aaaaaa.bbbbbb.cccccc
  • aaaaaa : Header 정보
    → type, alg로 이루어진 객체를 갖고 있음.
    { type : JWT, alg : Hash algorithm }
  • bbbbbb : Payload
    → 등록된 클레임, 공개 클레임, 비공개 클레임으로 이루어져 있음.
    등록된 클레임 : 발급자(issuer), 제목(subject), 대상자(audience), 유효기간(expiraton), 활성날짜(nbf), 생성일짜(iat), 고유식별번호(jti)
    공개 클레임 : 충돌이 방지된 이름을 지정. URI 형식으로 지정함.
    비공개 클레임 : FE ↔ BE 상호 협의된 정보를 담고 있음. 이를테면 userId와 같은 정보
  • cccccc : Signature
    → 위 2개의 정보를 각자 base64로 Encoding한 후 구분자로 "." 을 붙이고 난 뒤 나온 문자열을 alg에 쓰인 알고리즘으로 암호화 진행 후 base64로 변환된 값

위 3개의 파트를 이어 붙이면 JWT 토큰이 된다.

JWT를 깊게 쓴건 아니라서 정확히 사용하고 있는지를 모르겠다.

 

참고문서)

https://velopert.com/2389