# TIL-20210415

# Today

  • JWT token

# Content

# JWT token

JWT(Json Web Token)은 웹 인증을 토큰(token)이라는 데이터를 통해 진행하는 방식이다.

  • 기본 원리

JWT는 세 파트로 나누어지며 각 파트는 점으로 구분하여 11111.222222.333333의 형식을 이루고 있다.

각 파트를 헤더 (header), 페이로드(payload), 서명(Sinature) 이라고 부른다.

먼저 헤더(header)는 토큰 타입암호화 알고리즘의 두 가지 데이터를 담고 있다. JWT 토큰이기 때문에 토큰 타입은 jwt이고, 알고리즘은 HMAC, SHA256등의 암호화 방식을 설정 할 수 있다.

다음으로 payload는 토큰에 담을 클레임(claim). 즉, 데이터를 넣을 수 있다. 객체형식의 데이터를 토큰에 넣어서 보내줄 수 있다.

마지막으로, sinature는 헤더(header)와 페이로드(payload)를 합친 문자열을 서명한 값이다. 서명은 헤더의 정의된 알고리즘과 비밀 키를 이용해 성성하고 Base64 URL-Safe로 인코딩한다.

*URL-Safe: URL에 들어가도 되는 문자열

웹 서비스에서 인증 사용되는 기본적인 토큰은 두 가지를 많이 사용한다. accessToken,refreshToken이다.

  • accessToken

엑세스 토큰은 사용자가 인증을 마친 경우 발급된다. 해당 사용자는 이후 accessToken을 http 요청시 헤더에 심어 요청을 보낸다.

헤더에 들어간 accessToken을 통해 서버는 사용자를 권한이 있음을 판단하고, 해당 요청에 알맞은 응답을 보내게 된다.

  • refreshToken 리프레시 토큰은 사용자의 엑세스 토큰이 만료되는 경우 새로운 accessToken을 발급하기 위해 사용한다. 보통은 로그인에 성공하면 acceessToken,refreshToken 모두를 발급하며, 클라이언트는 두 가지 토큰을 가지고 있다가. 필요한 경우에 알맞은 토큰을 서버에 보내게 된다.

refreshToken도 http요청 헤더에 authorization속성값으로 전달할 수 있다.