1.JWT 란?
JWT(Json Web Token)은, 전자서명을 포함한 JSON 형태의 표준으로 RFC 7519에 정의되어 있다. 일반적으로 인증된 사용자가 서버에 원하는 리소스 자원(정보)를 요청할 때, 리소스 자원(정보)에 접근할 수 있는 인가된 사용자인지 검증할 시 사용된다.
2. 토큰 구조
JWT는 헤더(header), 페이로드(payload), 서명(signature)의 총 3가지 구성요소로 구성된다. 각 구성요소는 평문 문자열이 아닌, 각 구성요소 별 Base64 인코딩되어 표시된다.

※ 참조 : https://jwt.io/ (JWT 디버거를 통해 JWT 구조를 확인할 수 있다.)
2-1.헤더(header)
헤더(header)는 토큰 타입, 사용된 암호 알고리즘 정보를 포함하고 있다.

2-2.페이로드(payload)
페이로드(payload)는 실제 사용자 정보, 인증정보 등의 서버로 전달 또는 요청을 위한 정보들을 포함하고 있다. 해당 정보들은 클레임(Claim)으로 불리며, 키:값(key:value)로 구성된다. Json Web Token에 정의된 클레임(Claim)뿐만이 아니라, 토큰 사용 목적에 따른 클레임(Claim)을 추가할 수 있다.

2-3.서명(signature)
서명(signature)은 Json Web Token의 위/변조 여부를 검증할 수 있는 정보를 포함하고 있다. 위/변조 여부를 검증할 수 있는 정보는 헤더(header) + 페이로드(payload) + 비밀키(secret key)를 합친 문자열을 헤더(header)에 명시된 암호 알고리즘을 통해 생성한 암호문으로 구성된다.

3. 토큰 발급 절차
JWT의 발급 절차는, 세션 ID 발급 과정과 동일하다.
(1) 계정 정보 입력 (Client)
(2) 서버는 계정 정보를 DB에서 조회 (Server)
(3) DB 조회로 인증된 후, 토큰 생성 (Server) : Access Token + Refresh Token
(4) 서버는 생성된 토큰을 발급 (Client) : Access Token (경우에 따라 Refresh Token도 발급)

4. Access Token과 Refresh Token이란?
앞서 JWT는 하나의 토큰으로 구성될 수도 있고, 관리 상의 목적으로 Access Token과 Refresh Token으로 구성되어 발급될 수 있다.
4-1 각 토큰 정의 및 구조
Access Token과 Refresh Token의 구조는 같으며, 토큰 목적에 따른 페이로드(payload)의 데이터가 상이할 수 있다.
| Access Token | Refresh Token | |
| 사용 목적 | 리소스 자원(정보) 조회 시, 인가된 사용자 확인 | Access Token 재발급 시 이용 |
| 만료 시간 | 1분 ~ 24시간 (일반적으로 10~20분 내외) | 1시간 ~ 365일 (일반적으로 하루 또는 2주 내외) |
| 관리 주체 | 클라이언트 (Client) | 클라이언트 (Client) / 서버 (Server) |
| 차이점 | 만료 시 Refresh Token을 통한 재발급 | 만료 시 재인증 필요 |
4-2 Access Token 재발급 절차
Access Token이 만료된 경우, Refresh Token을 통해 재발급 과정을 수행한다.
(1) 요청 HTTP 메시지 + Access Token로 리소스 자원(정보) 요청 : Client
(2) Access Token 만료 여부 확인 : Server
(3) Access Token 만료 응답 : Server
(4) 요청 HTTP 메시지 + Refresh Token으로 Access Token 재발급 요청 : Client
(5) Refresh Token 검증 후, Access Token 재생성 : Server
(6) 응답HTTP 메시지 + 재생성된 Access Token 발급 : Server

이는, 일반적인 구조로써 아래의 고려사항으로 인해 재발급 절차가 변경될 수 있다.
■ Client단에서 Access Token 만료 시간을 확인하는 경우
■ Client단에 Refresh Token이 발급되지 않는 경우 (서버에서 Refresh Token을 관리)
'기초 공부 > 웹' 카테고리의 다른 글
| [WEB] 웹 브라우저 개발자 도구 (2) | 2023.12.05 |
|---|---|
| [WEB] WEB(웹) 표준 ? (feat. HTML 표준) (0) | 2023.03.17 |
| [WEB] 인증토큰이란? (0) | 2022.12.28 |
| [WEB] HTML / CSS / Javascript 란 ? _ 3편 Javascript (0) | 2022.11.03 |
| [WEB] HTML / CSS / Javascript 란 ? _ 2편 CSS (0) | 2022.11.01 |