[WIL] JWT

Sunghoman·2022년 9월 25일
0

WIL

목록 보기
1/13
post-thumbnail

JWT가 뭥미?

JSON Web Token의 줄임말 입니다.

토큰 기반 인증에 주로 사용하는 방식 중 하나로,
API를 사용하는 웹 서비스에서 특히 많이 사용하고 있음

그니까, 인증에 필요한 정보를 암호화 시킨 JSON(토큰)임

인증에 필요한 정보를 JWT라는 토큰에 정보를 (JSON 형태로) 담아서,
HTTP 헤더에 실어서 서버가 클라이언트를 식별하는 방식임

JSON 데이터를 Base64 URL-safe Encode를 통해 인코딩하여 직렬화한 것이며,
토큰 내부에는 위변조 방지를 위한 개인키를 통한 전자서명도 들어있다.

Base64 URL-safe Encode는 URL에서 오류없이 사용하도록,
+ , /를 각각 - , _로 표현한거임

사용자가 JWT를 서버로 전송하면, 서버는 서명을 검증하고,
검증이 완료되면 요청한 응답을 돌려준다.


JWT의 구조

JWT는 .을 구분자로 나누어지는 세 가지 문자열의 조합임
.을 기준으로 좌측부터 Header, Payload, Signature를 의미함


출처 : https://inpa.tistory.com/entry/WEB-%F0%9F%93%9A-JWTjson-web-token-%EB%9E%80-%F0%9F%92%AF-%EC%A0%95%EB%A6%AC

JWT에서 사용할 타입과 해시 알고리즘의 종류가 담겨있음

Payload

서버에서 첨부한 사용자 권한 정보와 데이터가 담겨있음

토큰에서 사용할 정보의 조각들인 Claim이 담겨있다.
실제 JWT를 통해 알 수 있는 데이터

즉, 서버와 클라이언트가 주고받는 시스템에서 실제로 사용될 정보를 담는 섹션
Claim은 Key-Value 형식으로 이루어진 한 쌍의 정보를 Claim이라고 칭한다

Signature

Header, Payload를 Base64 URL-safe Encode를 한 이후
Header에 명시된 해시함수를 적용하고, 개인키(Private Key)로 서명한 전자서명이 담김
전자서명에는 비대칭 암호화 알고리즘을 사용하므로, 암호화를 위한 키와 복호화를 위한 키가 다름
암호화에는 개인키를, 복호화에는 공개키를 사용한다

시그니처에서 사용하는 알고리즘은 헤더에서 정의한 알고리즘 방식(alg)를 활용함
시그니처의 구조는 (Header + Payload)와 서버가 갖고있는 유일한 Key 값
합친 것을 헤더에서 정의한 알고리즘으로 암호화 함

Signature = Base64Url(Header) + . + Base64Url(Payload) + Server's Key

Header랑 Payload는 단순히 인코딩 된 값이라
제 3자가 복호화 및 조작할 수 있지만,
Signature는 서버 측에서 관리하는 비밀키가 유출되지 않는 이상 복호화할 수 없음
따라서, Signature는 토큰의 위변조 여부를 확인하는데 사용함




JWT 장점

  1. Header와 Payload를 가지고 Signature를 생성하므로 데이터 위변조를 막을 수 있다
  2. 인증 정보에 대한 별도의 저장소가 필요없다
  3. JWT는 토큰에 대한 기본 정보와 전달할 정보 및 토큰이 검증되었음을 증명하는 서명 등이 필요한 모든 정보를 자체적으로 갖고 있음
  4. 클라이언트 인증 정보를 저장하는 세션과 다르게, 서버는 Stateless가 된다
  5. 확장성이 우수함
  6. 토큰 기반으로 다른 로그인 시스템에 대한 접근 및 권한 공유가 가능함 (쿠키와의 차이)
  7. OAuth의 경우, FaceBook, Google 등 소셜 계정을 이용하여 다른 웹서비스에서도 로그인 할 수 있다
  8. 모바일 어플리케이션 환경에서도 잘 동작한다 (모바일은 세션 사용 불가능)

JWT 단점

  1. cookie / session과 다르게 JWT는 토큰의 길이가 길어서, 네트워크 부하가 심함
  2. Payload 자체는 암호화 되지 않아서, 유저의 중요한 정보를 담을 수 없다
  3. 토큰을 탈취당하면 대처하기 어려움

**[여기](https://jwt.io/)**에서 직접 JWT토큰을 인코딩 및 디코딩 해볼 수 있음
profile
쉽게만 살아가면 개재밌어 빙고

0개의 댓글