JWT?

J4mbo9·2023년 1월 6일
0
post-thumbnail

Jwt란?

  • JSON Web Token 의 약자.
  • JSON 포맷을 이용하여 사용자의 정보를 저장하는 Claim 기반의 Web Token.
  • 토큰 자체를 정보로 하는 Self-Contained 방식으로 정보 전달.

📌 Self-Contained 방식

  • 필요한 모든 정보를 자체적으로 지니고 있어서 자신의 객체를 사용 하는 것

그렇다면 Jwt는 언제 쓸까?

  • 권한부여 : 사용자가 로그인하면 이후의 각 요청에는 JWT가 포함되어 사용자가 해당 토큰으로 허용된 경로, 서비스 및 리소스에 접근할 수 있다.

  • 정보 교환: 공개/개인 키 쌍을 사용하여 JWT에 서명할 수 있으므로 보낸 사람이 누구인지 확인할 수 있다. 또한 정보가 도중에 조작되지않았는지 확인 할 수 있다.

static 변수에 jwt를 저장하는 이유

HTTP통신이 올때마다 jwt를 헤더에 보내야하지만 로컬 스토리지에서 계속 불러오면 오버헤드 발생

📌 오버헤드 ?
A라는 처리를 실행하는데 5초 걸린다.이 때 안전성을 고려하고 부가적인 B라는 처리를 추가한 결과 처리 시간이 15초이다.이 경우 오버헤드는 10초이다.
또한 B를 개선하여 B'라는 처리를 한 결과 처리 시간이 12초라면 오버헤드가 3초 단축되었다고 한다.

🛠 구조

  1. Header
  • 어떤 종류의 토큰인지 , 어떤 알고리즘으로 Sign할지 JSON 포맷형태로 정의.
  • 일반적으로 토큰 유형(JWT)과 사용 중인 서명 알고리즘(예: HMAC SHA256 또는 RSA)
  • 그런 다음 이 JSON은 Base64Url 로 인코딩되어 JWT의 첫 번째 부분을 구성
  1. Payload

    • 서버에서 활용할 수 있는 사용자의 정보
    • 토큰에서 사용할 정보인 Claim이 담겨있다.
    • Json(Key/Value) 형태로 다수의 정보를 넣을 수 있다.
    • 클레임은 총 3가지로 나눔.

      key-value 형식으로 이루어진 한 쌍의 정보를 Claim이라고 칭한다.

  • 등록된 클레임

    • 토큰 정보를 표현하기 위해 이미 정해진 종류의 데이터
    • Optianl 하며,권장되는 클레임 집합
    • JWT를 간결하게 하기 위해 key는 모두 길이 3의 String이다
  • 공개 클레임

    • JWT 토큰에서 사용하기 위해 정의 되었지만, 충돌이 방지된 네임스페이스를 담고있는 URI 와 같이 이름이 충돌되지 않도록 해야함.

      	{ 
      	"https://velog.io/@chkfrdlek": true 
      	}
  • 비공개 클레임

    • 두 개체(서버와 클라이언트)가 정보를 공유하기 위해 사용하기로 합의한 클레임 정보

      	 { 
      	"token_type": access 
          }
  1. Signature
  • 위에서 만든 헤더(Header)와 페이로드(Payload)의 값을 각각 BASE64Url로 인코딩하고, 인코딩한 값을 비밀 키를 이용해 헤더(Header)에서 정의한 알고리즘으로 해싱을 하고, 이 값을 다시 BASE64Url로 인코딩하여 생성

JWT 디코딩 및 생성 확인 예시)

참고 사이트
망나니 개발자
https://icarus8050.tistory.com/12
https://jwt.io/
위키백과

profile
개발개발개발개발

0개의 댓글