JWT Json Web Token

2023. 2. 9. 11:08gongbu

- 인증에 필요한 정보들을 암호화 시킨 JSON 토큰

- JWT토큰(Access Token)을 HTTP 헤더를 통해 전송하고, 서버에서 사용자를 식별하는 방식

- 기본적으로 Access Token, Refresh Token 두개로 이중인증하여 토큰 탈취로 인한 보안문제를 방지한다

 

JWT 구조

- Header, Payload, Signature 로 구성되어 있으며 각 요소는 "." 으로 구분되어 있다

 

- Header : 토큰 정보(암호화 알고리즘, 토큰타입)

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

 

- Payload : 내용(제목, 사용자, 토큰 발급시간)등의 "데이터" - 여기 있는거 말고 다른것도 들어갈 수 있음

(ex) iss : 발급자, aud : 대상자, nbf : 토큰 활성 날짜 , exp : 토큰 만료시간 , jti : 토큰 식별자 등) 

{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}

 

- Signature(전자서명)

HMACSHA256(
	base64UrlEncode(header) + "." +
	base64UrlEncode(payload),
	your-256-bit-secret
)

 

Access Token, Refresh Token

- 기본적으로 같은 형식을 가진 JWT 토큰이다.

- 저장위치와 수명, 사용방식이 다르다

- Access Token : 접근에 사용되는 토큰, 수명 짧음, 클라이언트에 저장

- Refresh Token : Access Token 재발급, 수명 길다, 데이터베이스에 유저정보와 같이 저장

Access Token 차이 Refresh Token
짧음 수명 길다
서버 접근 사용 Access Token 재발급
클라이언트 / 서버 저장위치 클라이언트 / 데이터 베이스

- 작동 흐름

서버에서 클라이언트에 웹 화면 제공

클라이언트에서 서버에 로그인 시도

서버에서 사용자에게 토큰 발급

클라이언트에서 서버로 Access Token 이용 서버 접근

서버에서 클라이언트로부터받은 Acces Token 확인 후 해당 Access Token에 알맞은 응답

 

- Access Token의 기한이 만료된 경우

클라이언트에서 Refresh Token 이용하여 서버에 Access Token 재발급 요청

서버에서 클라이언트에게 AccessToken 재발급

 

 https://jwt.io/