JWT (Json Web Token)

i_sy_code·2022년 6월 20일
0
post-thumbnail

🔑 JWT란?

Json Web Token의 줄임말로써
사용자 인증을 위해 json 형태로 암호화된 웹 토큰이자 인터넷 표준 인증 방식이라고 볼 수 있다.
그럼 토큰이란 무엇인가?
토큰은 '징표'라는 의미로, 상품이나 서비스 교환권을 뜻하며 화폐 기능을 대신하는 것을 말한다.
이것을 IT에 가깝게 말하자면 보안 객체의 접근 관리에 사용되는 장치이다.

HTTP의 가장 큰 특징이 stateless는 보안을 위해 로그인시 해당 유저 정보를 보존해놓지 않는다.
다만, 개별 입장권이라 볼 수 있는 JWT가 이를 가능하게 만든다.
마치 우리가 놀이공원에 갈 때 BIG3, 자유이용권, 오후권 등 다른 이용 권한을 가진 표를 사듯
JWT 역시 각기 다른 권한을 부여할 수 있는 인증 티켓이라고 볼 수 있는 것이다.
데이터 요청시 HTTP 헤더에 토큰을 담아 요청한다.


🔑 JWT의 구조

JWT는 Header.Payload.Signature 세 가지로 구성되어 있다.

1.Header

{
  "typ" : "JWT",
  "alg" : "HS512"
}

Header는 토큰의 타입이나, 서명 생성시 어떤 알고리즘을 썼는지 저장한다.

2.Payload

{
  "sub" : "1", // sub(subject) - 토큰명(식별값)
  "iss" : "sy", // iss(issuer) - 토큰 발급자
  "exp" : 163698715, // exp(expiration time) - 토큰 만료 시간
  "iat" : 163698715, // lat(issued at) - 토큰 발급 시간
}

Payload는 토큰에 대한 정보(Claim)를 키-밸류 형태로 저장한다.
key값은 보통 3글자로 되어있다.
payload에는 민감한 정보를 담지 않아야 하는데, header와 payload는 특정 암호화가 걸려있는 부분이 아니기 때문에 누구나 디코딩시 해당 부분에 담긴 정보를 알 수 있기 때문이다.
따라서 JWT는 유저를 단순 식별하기 위한 정보만을 담아야 한다.

3. Signature

HMASCSHA512(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  your-256-bit-secret
)

이는 signature를 디코딩했을시 보게되는 화면으로써, header와 payload를 디코딩한 값과 서버에 있는 개인키(your-256-bit-secret)가 보여지게 된다.
signature는 개인키를 가지고서만 복호화할 수 있다.


🔑 JWT의 장단점

장점

  1. 사용자 인증에 필요한 모든 정보가 토큰 자체에 포함되어 있기 때문에 별도의 인증 저장소가 필요없다.
  2. 토큰만 가지고 유효성 검사 및 사용자 식별이 가능하므로 서버를 stateless 상태로 유지할 수 있다.

단점

  1. 토큰 자체에 정보를 담고 있으므로 탈취시 위험부담이 크다.
  2. 페이로드에 3종류의 클레임을 저장하기 때문에 정보가 많아져 토큰 길이가 늘어나면 네트웨크에 부하를 줄 수 있다.
  3. 토큰 임의 삭제가 불가능하므로 꼭 만료시간을 넣어주어야 한다.




🔑 JSON 데이터

데이터를 주고 받는 형식 중에 JSON은 데이터를 key와 value 형태로 받는 방식을 말한다.
서버와 클라이언트에서 처리할 데이터를 주고받을 때 쓰는 자료 형식에는 대표적으로 XML와 JSON이 있다.
XML은 eXtensible Markup Language의 줄임말로 다목적 마크업 언어로 html처럼 태그로 둘러쌓여 있다.
xml에서 JSON으로 대체되는 것이 추세인데 그 이유는

  1. JSON은 특정 언어에 종속되지 않는다.
  2. xml보다 작은 용량으로 데이터 전송이 가능하다.
  3. xml보다 구조 정의의 용이성과 가독성이 뛰어나다.

위와 같은 장점을 JSON이 갖고 있기 때문이다.



🔗 참고 자료
JWT(JSON Web Token)의 개념부터 구현까지 알아보기
WT(Json Web Token) - 비대칭키 기반 토큰 인증 방식
JWT의 단점과 주의사항
JSON과 XML의 개요 및 차이점

profile
삶은 끊임없이 나의 한계와 맞서는 일이다.

0개의 댓글