JWT(JSON Web Token)

김영후·2022년 8월 1일
0
post-thumbnail

JWT란 JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim기반의 Web Token이다.

JWT 구조


토큰의 헤더는 typ와 alg 두 가지 정보로 구성된다.

typ: 토큰의 타입을 지정 ex) JWT

alg: 알고리즘 방식을 지정하며, 서명 및 토큰 검증에 사용한다. ex)SHA256 or RSA


Payload

페이로드에는 토큰에서 사용될 정보의 조각들인 클레임이 담겨 있다.

클레임은 총 세 가지로 나누어진다.


  1. 등록된 클레임

토큰 정보를 표현하기 위해 이미 정해진 종류의 데이터

ex) iss: 토큰 발급자, sub: 토큰 제목


  1. 공개 클레임

사용자 정의 클레임으로, 공개용 정보를 위해 사용된다. 충돌 방지를 위해 URI 포맷을 이용한다.

ex)

https://poagg42.velog.io" : true


  1. 비공개 클레임

사용자 정의 클레임으로, 서버와 클라이언트 사이에 임의로 지정한 정보를 저장한다.

ex)

"token_type": access


Signature

서명은 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드


JWT 토큰 예시



생성된 토큰은 HTTP 통신을 할 때 Authorization이라는 key의 value로 사용된다.

Bearer는 의미가 없는 약속된 값


JWT의 단점과 고려사항

Self-contatined : 토큰 자체에 정보를 담고 있어서 위험하다

토큰 길이 : 정보의 양이 많아질 수록 토큰의 길이가 길어진다.

Payload 인코딩: 페이로드 자체는 암호화 된 것이 아니라 , BASE64Url로 인코딩 된 것이다. 주요 데이터를 넣지 않도록 조심하자.

Stateless: JWT는 상태를 저장하지 않기 때문에 한 번 만들어지면 제어가 불가능. 즉, 토큰을 임의로 삭제하는 것이 불가능하므로 토큰 만료 시간을 넣어주어야 한다.

Store Token: 토큰은 클라이언트 측에서 관리해야 하기 때문에, 토큰을 저장해야 한다.

profile
https://poagg.tistory.com/ 로 이전합니다.

0개의 댓글