JWT(JSON Web Token ) ?

임동현·2022년 7월 6일
0

JSON WEB TOKEN(JWT)

JWT란?

  • JSON Web Token (JWT) 은 웹 표준 으로서 두 개체에서 JSON 객체를 사용하여 가볍고 자가수용적인(self-contained) 방식으로 정보를 안전성 있게 전달해준다.

  • 수많은 프로그래밍 언어(C,Java,Python,C++,C#,Javascript등등) 지원

  • JWT Token은 해당 토큰에 대한 기본정보, 전달 할 정보, 그리고 토큰의 검증되었음을 증명하는 signature 를 포함 하고 있다.

  • HTTP Header 에 넣는 방식으로도 URL 의 Parameter 로도 전달될 수 있기에 손쉽게 전달이 가능하다는 장점이 있다.

  • 단점으로는 해독하기가 굉장히 쉽기 때문에 ,JWT 내에는 민감한 정보(유저 비밀번호등 .. )을 담으면 안된다.

  • Secret Key 로 암호화 / 복호화 하기에 Secret Key 보관에 신경써야한다.

  • Header(헤더).Payload(내용).Signature(서명)
  • .을 구분으로 하여 3가지 문자열로 구성된다.
  • Header 와 Payload는 디코딩을 하면 평문으로 해독이 가능하다. 하지만 Signature 부분은 복호화 할수가 없다.

헤더(Header)

type:Type of the token : JWT
alg :Hashing Algorithem (ex. HMAC SHA256, RSA)
토큰을 검증할 때 사용되는 Signature 부분에서 알고리즘이 사용된다.

내용(Payload)

  • name/value 쌍으로 이루어져 있으며 ,내용 (payload)에 위치한 속성들을 Claim이라고 부른다.

  • 클레임의 종류
    ○ 등록된(Registered) 클레임
    ○ 공개(Public) 클레임
    ○ 비공개(Private) 클레임

서명(Signature)

Header 와 Payload 는 암호화를 한 것이 아닌 , 단순히 JSON 문자열을 base64로 인코딩한 것에 불과하기에 누구나 디코딩을 한다면 헤더와 페이로드의 내용을 볼 수 있다.
따라서 해커가 JWT 를 탈취하여 수정한 후 서버로 보내는 등의 경우를 방지하기 위해 있는것이 바로 Signature 부분이다.

서명은 헤더의 (인코딩값 + 정보의 인코딩 값) 에 Secret Key 로 Hash 를 하여 생성한다.

그리고 이 모든 Header.Payload.Signature 을 .중간자로 합쳐주면 JWT!

profile
프론트엔드 공부중

0개의 댓글