Studying/Java

[IT용어] JWT(Json Web Token)

YOO'sssss 2023. 8. 8. 16:11

 

 

토큰 : 웹 상에서는 특정한 목적으로만 사용 가능한 동전에 일종의 권한를 주는 것

본인만 접근 가능하도록 하는 본인 확인 수단

 

 

JWT(JSON Web Token)는 당사자 간에 정보를 JSON 개체로 안전하게 전송하기 위한 간결하고 독립적인 방법을 정의하는 개방형 표

 

JWT (JSON Web Token) 란?

  • 통신에 JSON 을 이용하여 JSON 객체를 통해 두 당사자 간 정보를 보안이 적용된 안전한 방식으로 전달한다.
  • JWT 는 다른 인증방식과 비교했을 때 컴팩트하며 스스로 정보를 담고 있다.
  • 디지털 서명이 되어있기 때문에 정보에 인증이 되어 있고 믿을 수 있다.
    • 보통 HMAC 알고리즘과 함께 secret 을 이용하여 서명한다.
    • RSA, ECDSA 를 이용한 public/private key 쌍을 이용할 수도 있다.

 

 

JWT(JSON Web Token)는 언제 사용하나?

Authorization (인가)

유저가 로그인하면 이후의 요청은 JWT 를 포함하여 사용자가 특정 경로, 서비스, 리소스에 접근하는 것을 허락해준다.

아주 작은 오버헤드와 다른 도메인간에서도 쉽게 이용될 수 있다는 이유 때문에, Single Sign On 은 요즘 JWT 를 널리 사용하는 기능 중 하나이다.

 

Information Exchange (정보 교환)

이를테면 public/private key 쌍을 이용하여 JWT 가 서명될 수 있기에, JWT 는 안전하게 정보를 주고받는데도 잘 쓰인다.

public/private key 쌍을 이용하면, 보낸 사람에 대한 인증도 되며 서명은 헤더와 페이로드를 사용해 계산하므로 내용이 변조되지 않았다는 사실도 알 수 있다.

 

  • 인증(Authentication): 대표적인 로그인 기능. 아이디와 패스워드 등을 통해 특정 서비스에 일정 권한이 주어진 사용자임을 인증받는 서비스입니다.
  • 인가(Authorization): 사용자가 한 번 인증을 받은 후에, 해당 특정 서비스를 이용할 수 있는 지에 대한 여부를 결정하는 서비스.

여기서 인증은 로그인 버튼을 눌렀을때 로그인이 되는 것을 말하고, 인가는 로그인 상태가 쭉 유지 되며 마이페이지와 같은 로그인을 하고 나서 이용할 수 있는 서비스를 검증하는 것.

 

이러한 인증과 인가 기능을 구현하기 위해서 사용되는 것이 바로 JWT 토큰.

 

세션과 JWT토큰의 차이

  • 세션: 로그인 정보를 서버가 가지고 있음(데이터 베이스 등)
  • JWT토큰: 로그인 정보를 사용자가 가지고 있음(쿠키)

 

세션을 이용한 방법은 서버에 저장되어 있기 때문에 메모리 부족의 원인이 되고, 서버가 재부팅이 될 경우 사용자의 로그인 상태가 모두 해제가 되는 단점이 있어, 이런 단점을 보완하기 위해 JWT토큰을 사용합니다.

 

 

프로세스

1. HTTP /Login 엔드포인트로 username과 password를 담아 Request

2. 서버 측에서 서버에서 지정한 secret key 기반으로 jwt 토큰을 생성

3. jwt토큰을 browser로 Response(쿠키에 저장해서)

위까지가 로그인 프로세스이고,

4. 이후 서버에 요청할 때 JWT토큰을 포함해서 같이 Request

5. 서버는 JWT Signature를 체크한 후 JWT payload에 담긴 유저의 정보를 확인

6. 유저의 정보와 함께 Request를 처리하고 Response

 

 

 

JWT토큰은 JSON 데이터 구조를 사용하는 서명 표준으로 RFC7515라고 하며 헤더, 페이로드, 서명의 3가지 부분으로 구성

 

 

  • Header: 토큰의 타입과 해시 암호화 알고리즘으로 구성되며 토큰의 유형(JWT)과 HMAC, SHA256과 같은 해시 알고리즘을 나타냅니다
  • Payload: 토큰에 담을 정보를 포함합니다. json과 같이 name : value의 쌍으로 구성됩니다
  • Signature: secret key와 같은 서명 정보를 포함합니다.

 

 

JWT은 위와 같이 Expiration time을 가지도록 하여 수명을 관리. 특정 시간이 지나면 토큰이 만료되도록 하여 자동적으로 로그인 상태를 해제시키는 것

보통은 Access Token의 수명이 짧고 Refresh Token의 수명이 깁니다.

 

Access Token: 실제로 유저의 정보가 담긴 토큰으로, 서버에서 Request가 올 때 이 토큰에 있는 정보를 활용하여 사용자의 정보의 맞게 Response를 합니다.

Refresh Token: 새로운 Access Token을 발급해주기 위해 사용하는 토큰으로 짧은 수명을 가지는 Access Token에게 새로운 토큰을 발급해주기 위해 사용됩니다. 이 토큰은 보통 Database에 같이 유저 정보와 같이 기록합니다.

 

 

 

 

 

 

 

 

 

 

출처 : https://narup.tistory.com/232

출처 : https://jake-seo-dev.tistory.com/77#Authorization%---%EC%-D%B-%EA%B-%---