Skip to content

Latest commit

 

History

History
21 lines (18 loc) · 1.91 KB

jwt.md

File metadata and controls

21 lines (18 loc) · 1.91 KB

JWT(Json Web Token)이란?

일반적으로 클라이언트와 서버 사이에서 통신할 때 권한을 위해 사용하는 토큰
웹 상에서 정보를 Json형태로 주고 받기 위해 표준규약에 따라 생성한 암호화된 토큰으로 복잡하고 읽을 수 없는 string 형태로 저장되어있다.

JWT의 구성요소

image

JWT는 헤더(header), 페이로드(payload), 서명(signature) 세 파트로 나눠져 있다.

헤더 (Header)

  • 어떠한 알고리즘으로 암호화 할 것인지, 어떠한 토큰을 사용할 것 인지에 대한 정보가 들어있다.

정보 (Payload)

  • 전달하려는 정보(사용자 id나 다른 데이터들, 이것들을 클레임이라고 부른다)가 들어있다.
  • payload에 있는 내용은 수정이 가능하여 더 많은 정보를 추가할 수 있다.
  • 그러나 노출과 수정이 가능한 지점이기 때문에 인증이 필요한 최소한의 정보만을 담아야한다.
    (아이디, 비밀번호 등 개인정보가 아닌 이 토큰을 가졌을 때 권한의 범위나 토큰의 발급일과 만료일자 등)

서명 (Signature)

  • 가장 중요한 부분으로 헤더와 정보를 합친 후 발급해준 서버가 지정한 secret key로 암호화 시켜 토큰을 변조하기 어렵게 만들어준다.
    ex) 토큰이 발급된 후 누군가가 Payload의 정보를 수정하면 Payload에는 다른 누군가가 조작된 정보가 들어가 있지만
    Signatute에는 수정되기 전의 Payload 내용을 기반으로 이미 암호화 되어있는 결과가 저장되어 있기 때문에 조작되어있는 Payload와는 다른 결과값 반환
  • 이러한 방식으로 비교하면 서버는 토큰이 조작되었는지 아닌지를 쉽게 알 수 있고, 다른 누군가는 조작된 토큰을 악용하기가 어려워진다!