JWT ( Json Web Token )은 웹 표준으로 서버와 클라이언트 사이에서 정보를 안전하게 전송하기 위해 도움을 주는 웹 토큰 ( Web Token )이다.

  • JSON 형태의 데이터를 안전하게 전송하고 검증할 수 있는 기능을 제공한다.
  • 인터넷 표준으로 자리잡은 규칙이다.
  • 다양한 암호화 알고리즘을 사용할 수 있어, 신뢰성을 보장한다.
  • header.payload.signature의 형식으로 3가지의 데이터를 포함한다.

 

JWT 형태

jwt - Header, Payload, Signature

 

JWT는 앞서 언급했듯이, 크게 세 부분, 헤더 ( Header ), 페이로드 ( Payload ), 서명 ( Signature )로 구성되어 있다.

각각의 부분은 점 ( . ) 으로 분리된다.

 

JWT의 구조는 https://jwt.io/ 에서 확인할 수 있다.

  • Header : 헤더는 토큰의 타입과 어떤 암호화를 사용해 생성된 데이터인지 정듸외어 있다.
{
  "alg": "HS256",
  "typ": "JWT"
}
  • Payload : 페이로드는 실제 전달하려는 데이터를 담고 있다. 대표적으로 개발자가 원하는 데이터를 저장한다.
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}
  • Signature : 서명은 헤더와 페이로드, 그리고 비밀 키 ( Secret Key )를 이용해 생성된다. 이 서명은 토큰이 변조되지 않은 정상적인 토큰인지 확인할 수 있게 도와준다.
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
	secret
)

 

각 부분은 Base64로 인코딩해, 점 ( . ) 으로 연결하면 최종적으로 JWT를 생성하게 된다. 이렇게 생성된 JWT는 이전에 배운 쿠키 ( Cookie ) 또는 Path Parameter를 통해 전달될 수 있다.

 

JWT 특성

 1. JWT는 비밀 키를 모르더라도 복호화 ( Decode )가 가능하다.

  • JWT를 가진 사람이라면 누구나 해당 토큰에 어떤 데이터가 담겨있는지 확인할 수 있다.
  • 변조만 불가능 할 뿐, 누구나 복호화해 보는 것은 가능하다는 의미가 된다.

 2. 민감한 정보 ( 개인정보, 비밀번호 등 )는 담지 않도록 해야한다.

  • JWT의 페이로드는 누구나 복호화해 볼 수 있기 때문이다

 3. JavaScript와 같이 특정 언어에서만 사용 가능한것은 아니다

  • JWT는 단순히 데이터 형식일 뿐, 단지 개념으로 존재하고, 이 개념을 코드로 구현해 공개된 코드를 우리가 사용하는게 일반적이다.

쿠키, 세션과 다른점 

데이터를 교환하고 관리하는 방식인 쿠키 / 세션과 달리, JWT는 단순히 데이터를 표현하는 형식이다.

  • JWT로 만든 데이터는 변조가 어렵고, 서버에 별도의 상태 정보를 저장하지 않기 때문에, 서버를 Stateless ( 무상태 )로 관리할 수 있다.
  • 쿠키와 세션은 사용자의 로그인 정보나 세션 데이터를 서버에 저장하므로 상태를 유지한다. 따라서 Stateful ( 상태 보존 )하게 데이터가 관리된다.

 

'IT' 카테고리의 다른 글

[IT] Access Token, Refresh Token  (1) 2024.09.09
[IT] 인증, 인가  (0) 2024.09.09
[IT] 쿠키와 세션  (0) 2024.09.08
[AWS] RDS 구매하고 사용하기  (0) 2024.09.05
[IT] Javascript - Package Manager ( npm, yarn )  (0) 2024.08.28

+ Recent posts