개발하는 프로 국밥러
article thumbnail
Published 2022. 6. 27. 20:12
JWT(Json Web Token) CS/네트워크

지난 시간에 이어 JWT 에 대해서 이야기 해보겠습니다. 

 

Json 포맷을 사용하여, 토큰 자체를 정보로 사용하는 방식으로 주로 회원 인증이나, 정보 전달에 사용된다.

 

 

 

  • JWT 구조
    • Header, Payload, Signature 의 3 부분으로 이루어지며, JSON 형태인 Base64Url 로 인코딩 되어 표현된다.
    • 각각의 부분을 이어 주기 위해서 . 구분자를 사용하여 구분한다.
     
    1. Header
      • 토큰의 헤더는 typ, alg 두 가지 정보로 구성된다.
      • alg 는 헤더를 암호화 하는 것이 아니라, signature 를 해싱하기 위한 알고리즘을 지정하는 것이다.
        • typ : 토큰의 타입을 지정 ex)JWT
        • alg : 알고리즘 방식을 지정하며, signature 및 토큰 검증에 사용
    2. payload
      • 토큰의 페이로드에는 토큰에서 사용할 정보의 조각들인 클래임(Claim)이 담겨있다.
    3. signature
      • signature 는 토큰을 인코딩 하거나, 유효성 검증을 할 때 사용하는 고유한 암호화 코드이다.
      • signature 은 헤더와 페이로드의 값을 각각 Base64Url 로 인코딩하고, 인코딩 한 값을 비밀 키를 이용해 헤더에서 정의한 알고리즘으로 해싱하고, 다시 Base64Url 로 인코딩 하여 생성한다
  • JWT 단점 및 고려사항
    • 토큰 자체의 정보를 담고 있기에 양날의 검이 될 수 있다.
      토큰의 목적은 정보 전달이 아니다!! 인증의 목적이 있다!!
    • Payload 인코딩 : 페이로드 자체는 암호화 된 것이 아니라, Base64Url 로 인코딩 된 것이다. 중간의 payload 를 탈취하여 디코딩 하면 바로 볼 수가 있기에, 중요 데이터를 포함하지 않아야 한다.
    • JWT 는 상태를 저장하지 않기 때문에, 한번 만들어지면 제어가 불가능하다. 즉 토큰을 임의로 삭제하는 것이 불가능하기 때문에, 토큰 만료 시작을 꼭 넣어주어야 한다.
    • 토큰을 클라이언트에서 관리해야 하기 때문에, 토큰을 저장해야 한다.
profile

개발하는 프로 국밥러

@gugbab2

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!