Tiny Finger Point Hand With Heart
본문 바로가기
1일1CS

29. JWT(JSON Web Token)

by yoondii 2023. 1. 6.
728x90
반응형

 

JWT(JSON Web Token)

 인증에 필요한 정보들을 암호화시킨 JSON 토큰을 의미한다.

그리고 JWT 기반 인증은 JWT 토큰(Access Token)을 HTTP 헤더에 실어 서버가 클라이언트를 식별하는 방식이다.

 

JWT는 JSON 데이터를 Base64 URL-safe Encode 를 통해 인코딩하여 직렬화한 것이며, 토큰 내부에는 위변조 방지를 위해 개인키를 통한 전자서명도 들어있다.

따라서 사용자가 JWT 를 서버로 전송하면 서버는 서명을 검증하는 과정을 거치게 되며 검증이 완료되면 요청한 응답을 돌려준다.


JWT 구조

JWT는 dot(.)을 구분자로 3파트로 구분되어 있으며 각각의 파트를  Header, Payload, Signature를 의미한다.

Header

: 토큰의 타입과 해시 암호화 알고리즘으로 구성되어 있다. 첫번째는 토큰의 유형을 나타내고 두번째는 HMAC,SHA256또는 RSA와 같은 해시 알고리즘을 나타낸다.

Header는 typ와 alg 두 정보로 구성되는데, 여기서 alg는 Signature를 해싱하기 위한 알고리즘을 의미한다.

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

- alg: 알고리즘 방식을 지정하며, Signature와 토큰 검증에 사용한다.

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

Payload

: 토큰에 담을 Claim정보를 포함하고 있으며, Payload에 담는 정보의 함 조각을 Claim이라 부르고 이는 key/value pair로 이루어져 있다. 여러 조각(Claim)을 넣을 수 있다.

Claim은 Registered Claim, Public Claim, Pricate Claim 세종류가 있다.

  • Registed claim : 토큰 정보를 표현하기 위해 이미 정해진 종류의 데이터들.
    • iss(issuer; 발행자)
    • aud(audience;대상자)
    • sub(subject; 제목)
    • exp(expireation time; 만료 시간),NumericData 형식
    •  nbf(not before; 토큰활성일), 이 날이 지나기 전의 토큰은 활성화 x
    • iat(issued At; 발행 시간): 토큰 발급 이후의 경과 시간을 알 수 있음
    • jti(JWI ID; 토큰 식별자): 중복 방지를 위해 상용하며 일회용 토큰(Access Token)등에 사용된다.
  • Public claim : 사용자 정의 Claim, 공개용 정보를 위해 사용된다. 충돌 방지를 위해 URI 포맷을 이용한다.
{
	"https://yoondii.tistory.com": true
}
  • Private claim : 해당하는 당사자들 간에 정보를 공유하기 위해 만들어진 사용자 지정 클레임. 외부에 공개되도 상관없지만 해당 유저를 특정할 수 있는 정보들을 담는다.
{
	"token_type": access
}

 

Signature

: secret key를 포함하여 암호화되어 있다.


장/단점

장점

  • 토큰 자체에 인증에 필요한 정보가 모두 있기에 별도의 인증 저장소가 필요없다.
  • 별도의 사용자 정보를 요청할 필요가 없기에 데이터 요청이 좀 더 가벼워 질 수 있다.
  • XML보다 덜 장황해서 인코딩 시 크기도 작아져 SAML보다 컴팩트하다.
  • 분산/클라우드 기반 infra-strucure에 대응하기 쉽다.
  • URL 파라미터와 헤더로 사용하낟.
  • 수평 스케일이 쉽다.
  • 트래칙에 대한 부담이 적다.
  • 내장된 만료가 존재한다.
  • REST 서비스 제공이 가능하다.

단점

  • 저장 할 필드 수에 따라 토큰이 커질 수 있다.
  • 토큰이 클라이언트에 저장되어 데이터베이스에서 사용자 정보를 조작해도 코튼에 직접 적용할 수 없다.
  • stateless앱 환경에서는 토큰이 대부분의 요청에 전송되기에 트래픽 크기에 영향을 줄 수 있다.

 

 

 

출처-위키백과,https://catsbi.oopy.io/ , 알팍한코딩사전-세션 VS. 토큰! JWT가 뭔가요?

 

 

 

728x90
반응형

'1일1CS' 카테고리의 다른 글

31. 컴파일러란?  (0) 2023.01.06
30. 세션 기반 인증과 토큰(JWT) 기반 인증의 차이  (0) 2023.01.06
28. GPU란  (0) 2023.01.05
27. IPv4 와 IPv6  (0) 2023.01.05
26. 도메인(domain)이란?  (0) 2023.01.04

댓글