[WEB] JWT

in·2023년 8월 24일
0

WEB

목록 보기
7/11

JWT(JSON Web Token)

Json 포맷을 이용하여 사용자에 대한 속성을 저장하는 Claim 기반의 Web Token
(토큰 자체를 정보로 사용하는 Self-Contained 방식으로 안전하게 정보 전달)
주로 회원 인증, 정보 전달에 사용

구성요소

Header(헤더)

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

  • alg : 알고리즘 방식을 지정하며 서명(Signature) 및 토큰 검증에 사용 ex)HS256, RSA

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

PayLoad(페이로드)

토큰에서 사용할 정보의 조각들인 클레임(Claim)이 담겨 있음
총 3가지로 나뉘며 Json(Key/Value) 형태로 다수의 정보 넣을 수 있음

  • 등록된 클레임(Registered Claim)
    토큰 정보를 표현하기 위해 이미 정해진 종류의 데이터(간결함을 위해 Key는 길이 3의 String)
  • 공개 클레임(Public Claim)
    사용자 정의 클레임으로 공개용 정보를 위해 사용
  • 비공개 클레임(Private Claim)
    사용자 정의 클레임으로 서버와 클라이언트 사이에 임의로 지정한 정보 저장

Signature(서명)

토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드
-> 헤더와 페이로드의 값을 각각 base64URL로 인코딩하고 인코딩한 값을 비밀키를 이용해 헤더에서 정의한 알고리즘으로 해싱을 하고 이 값을 다시 base64URL로 인코딩하여 생성

JWT 이용한 인증 과정

유효기간이 짧은 Token을 발급하게 되면 사용자는 자주 로그인을 해야하기 때문에 번거롭고,
유효기간이 긴 Token을 발급하게 되면 제 3자에게 탈취당할 경우 보안에 취약
-> 이 점들을 보완하기 위해 Refresh Token 사용
-> Access Token의 유효기간이 만료 되었을 때 Refresh Token이 새로 발급해주는 열쇠가 됨

장점

  • Self-Contained 특성에 따라 별도의 인증 저장소 필요로 하지 않음

  • MSA 환경에서 중앙 집중식 인증 서버와 DB에 의존하지 않는 인증 및 인가 방법 제공

    세션 vs JWT

  • 서버의 자원을 사용하는 횟수가 JWT가 세션에 비해 훨씬 적음
    -> JWT는 사용자의 정보가 토큰의 PayLoad에 저장되어 있어서 서버 자원에 접근하지 않아도 인증/인가 가능

  • JWT는 트래픽이 많아져 다중 서버로 늘렸을 때에도 문제 없이 사용할 수 있음



[참고 자료]
🔗링크1
🔗링크2

0개의 댓글