목차

  • What is JWT?
  • JWT 내부 구조
  • JWT 인증 사용 방법
  • JWT 장점
  • JWT 단점

 

인증 방법은 크게 세션, 쿠키, token 방식 세가지가 있다.

그 중 오늘 알아볼 부분은 token 방식 중 JWT에 대해서 알아보자.

배움에는 늘 끝이 없구나..

 

What is JWT?

  • 일명 JWT 토큰이라고 부르는 토큰 방식의 풀네임은  Json Web Token 이다.
  • 개방형 표준 규격이다. RFC 7519 
  • 전자서명에는 비대칭 암호화 알고리즘을 사용하므로 암호화를 위한 키와 복호화를 위한 키가 다르다.
    암호화(전자서명)에는 개인키를, 복호화(검증)에는 공개키를 사용한다.
  • 아래 사이트에서 JWT 복호화, 암호화 정보를 확인할 수 있다.
    https://jwt.io/ 

 

 

JWT의 내부 구조

헤더 {
"alg" : "HS256"
, "typ" : "JWT"
}
토큰 생성을 위해 어떤 알고리즘을 사용할 지 명시한다.
HS256는 이 토큰이 HMAC-SHA256를 사용하여 서명됨을 의미한다.
일반적으로 쓰이는 암호화 알고리즘들은 SHA-2(HS256) 방식의 HMAC와 SHA-256(RS256) 방식의 RSA 서명이다. → 추가로 공부하자.
페이로드 {
"loggedInAs" : "admin"
, "iat" : 1422779638
}
토큰에 들어있는 custom한 정보들이 담겨있다.
클레임이라고 명명하기도 하는데, key-value로 이루어진 정보로 구성되어 있다.
서명 HMAC-SHA256( secret, base64urlEncoding(header) + '.' + base64urlEncoding(payload) ) 토큰을 안전하게 확인하기 위한 서명이다.
Base64url 인코딩을 이용하여 헤더와 페이로드를 인코딩하고 이 둘을 점(.)으로 구분자로 연결시킨다.
그 뒤에 헤더에 규정된 암호화 알고리즘에 따라 전체가 암호화된다.

간단한 예시를 보면 아래와 같다.

 

 

JWT 인증 사용방법

 

 

 

JWT 장점

  • Header와 Payload를 가지고 signature를 생성하므로 데이터 위변조를 막을 수 있다.
  • 인증 정보에 대한 별도의 저장소가 필요없다.
  • 필요한 모든 정보를 자체적으로 지니고 있다.
  • 클라이언트 인증정보를 저장하는 세션과는 다르게 서버는 클라이언트의 상태를 저장하지 않는다. (stateless)
  • 토큰 기반으로 다른 로그인 시스템에 접근 및 권한 공유가 가능하다. (쿠키는 불가)
  • Oauth의 경우 Facebook, Google등 소셜 계정을 이용해서 다른 웹서비스에서도 로그인을 할 수 있다.

 

 

JWT 단점

  • 쿠키/세션과 다르게 JWT는 토큰의 길이가 길어 인증 요청이 많아질수록 네트워크 부하가 심해진다.
  • Payload 자체는 암호화되지 않기 때문에 유저의 중요한 정보는 담을 수 없다.
  • 토큰을 탈취당한 경우 대처가 어렵다.

 

 

 

 

참고자료

 

더보기

- platuml : 직접그림

- https://ko.wikipedia.org/wiki/JSON_%EC%9B%B9_%ED%86%A0%ED%81%B0

- https://pronist.dev/143  

- https://www.ibm.com/docs/ko/zos-connect/zosconnect/3.0?topic=options-calling-api-secured-json-web-token-jwt 

 

+ Recent posts