JWT란?

두 개체 사이에서 JSON객체로 정보를 안전하게 전송하기 위한 간결하고 독립적인 방법.

사용목적

  • 권한 부여 - 사용자가 로그인 하면 이후의 각 요청에 JWT가 포함된다. 사용자가 해당 토큰으로 서비스 및 리소스에 접근 할 수 있다.
  • 정보 교환 - 공개/비밀 키를 사용하여 JWT에 서명할 수 있기 때문에 정보를 안전하게 전송하는 방법이다. signature은 header와 payload를 통해 계산되므로, 안에 내용이 변경 되었는지도 확인할 수 있다.

구조

dot(.) 로 구분되는 3부분

Header - 토큰의 타입(JWT)과 해시 암호화 알고리즘(ex. SHA256, RSA)을 담고 있다.

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

Payload - 토큰에 담을 정보(Claim)를 담고 있음. Claim Set이라고도 부름. Claim의 종류는 3가지이다.

  • registered claim - 서비스에서 필요한 정보들이 아니라 토큰에 대한 정보들을 담기위해 이름이 미리 정해진 클레임들. 사용은 선택적
  • public claim -  토큰에서 사용하기 위해 정의했지만, 충돌을 방지하기 위해 공개된 이름
  • private claim - 서버, 클라이언트, 그 외 모듈간에 협의한 클레임.

Signature - Header와 Payload의 데이터 무결성과 변조 방지를 위한 서명. Header + Payload를 합친후, Secret키를 이용하여 Header의 해싱 알고리즘으로 인코딩함.

JWT Token 인증 방법

JWT Token의 장단점

장점

  • JWT를 발급한 후에 Token 검증만 하면 되기 때문에 추가 저장소가 필요없다.
  • Stateless 서버. 토큰 값만 알고 있다면, 연결 유지를 하지 않아도 데이터를 요청할 수 있다.

단점

  • JWT는 한 번 발급되면 유효기간이 완료될때까지는 계속 사용이 가능하므로 유효기간이 지나기 전까지 정보 탈취가능
  • 길이가 길어서 인증이 필요한 요청이 많아질수록 서버의 자원낭비가 발생
  • 기본적으로 Payload에 대한 정보를 암호화 하지 않음. 단순이 BASE64로만 인코딩 하기 때문에 보안에 취약하다.

'개발' 카테고리의 다른 글

SSAFY 6기 합격후기 (전공자)  (0) 2021.06.30
[DB] SQL 문법  (0) 2021.04.12
[Python] 알고리즘 정리  (0) 2021.02.04
[C++] 알고리즘 정리  (0) 2020.07.16
프레임워크 vs 라이브러리  (0) 2020.02.07
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기