인증에 필요한 정보를 암호화시킨 토큰
다른 토큰 중 JWT는 전자 서명을 한다는 점이 다릅니다.
또한 JWT 를 사용하면 이점이 있습니다.
오늘은 JWT의 구조, 장점, 단점 등을 알아보겠습니다.
헤더(Header),페이로드(payload),서명(signature) 세 파트를 . 으로 구분하는 구조이다.
JWT를 검증하는데 필요한 정보를 가진 JSON 객체는 Base64로 인코딩된 문자열이다.
인코딩된 토큰을 Base64로 디코딩하면 아래와 같다.
Header
헤더는 jwt를 어떻게 검증(verify)하는가에 대한 내용을 담고있다. alg는 서명시 사용하는 알고리즘이고, typ은 Type을 줄인 말로 토큰의 타입을 의미한다.
Payload
JWT의 내용. 페이로드에 있는 속성들을 클레임 셋(Claim Set)이라고 부른다. 클레임 셋은 jwt에 대한 내용(토큰 생성자의 정보, 생성일시,,,)이나 클라이언트와 서버 간 주고받기로 한 데이터들로 구성된다.
Signature
점(.)을 구분자로 해서 헤더와 페이로드를 합진 문자열을 서명한 값. 서명은 헤더의 alg에 정의된 알고리즘과 비밀 키를 이용해 생성하고 Base64로 인코딩 한다. 토큰의 유효성 검사에 사용된다.
짧은 만료 기한 설정
토큰의 만료 시간이 짧으면 탈취되더라도 금방 만료되기 때문에 피해를 최소화 할 수 있다. 하지만 사용자가 자주 로그인 해야하는 불편함이 있다.
Sliding Session
예를들어 로그인하고 글을 작성하는 도중 토큰이 만료 된다면 저장 작업이 정상적으로 작동하지않고 작성한 글이 날아가는 일이 생기는 등 불편함이 존재한다. Sliding Session은 서비스를 지속적으로 이용하는 클라이언트에게 자동으로 토큰 만료 기한을 늘려주는 방법이다. 1번의 자주 로그인해야하는 단점을 보완시켜준다.
Refresh Token
클라이언트가 로그인 요청을 보내면 서버는 Access Token과 그보다 만료기간이 긴 Refresh Token을 함께 내려준다. 클라이언트는 Access Token이 만료되었을 때, Refresh Token을 사용하여 Acess Token의 재발급을 요청한다. 서버는 DB에 저장된 Refresh Token과 비교하여 유요한 경우 새로운 Access Token을 발급하고, 만료된 경우 다시 로그인 시킨다.
검증을 위해서는 서버에 Refresh Token을 별도로 저장시켜야한다.
RefreshToken은 서버에서 따로 저장을 하고 있기 때문에 강제로 토큰을 만료시키는 것이 가능합니다. -> RefreshToken 만료