JWT , JSON Web Token
인증에 필요한 정보들을 암호화시킨 JSON 토큰
JWT기반 인증은 JWT Token을 HTTP헤더에 실어 서버가 클라이언트를 식별하는 방식이다.
웹서비스에서, 사용자 인증의 가장 대표적인 방식 두가지는 세션방식
과 토근방식
이 있다.
JWT는 그 중에서도 토큰방식
이다.
이를 사용하는 이유는 HTTP가 stateless한 특성때문인데, 상태를 기억하지 못하기 때문이다.
상태를 기억하지 못한다는 것은 유저가 로그인 했다는 것을 기억하지 못하기 때문에
새 페이지를 요청할 때마다 매번 로그인을 해야한다면 매우 불편할 것이다.
이를 해결하기 위해 나온 대표적인 도구가 바로 세션
과토큰
이다.
두가지의 가장 큰 차이점은 다음과 같다.
세션은 DB서버에 저장.
토큰은 클라이언트 측에서만 저장
먼저 세션인증의 동작방식.
토큰인증의 동작방식
두가지 방식의 특징 비교
최근 대부분 웹서비스가
토큰방식
을 선택하게 되는 이유는확장성
에 있다
세션은 서버에 저장되기 때문에 한번에 많은 다중 접속자 발생 시 과부하가 걸릴 수도있다
이를 해결하기 위해 Scale-Up / Scale-Out같은 방식을 사용할 수 있지만,
Scale-Up은 비용의 문제, Scale-Out으로 서버를 여러대두면 세션을 쓰기가 또 복잡해진다.
이러한 세션의 단점으로 sticky session / session clustering과 같은 방식도 등장했지만, 이것도 처리비용이 발생하므로,
애초에 이런걱정을 안해도 되는 토큰을 사용
하지만, 토큰은 세션에 비해 보안측면에서 상대적으로 취약하다. 이를 해결하기 위해 나온것이 Refresh Token
Refresh Token
은 기존 토큰과 동일한 형태의 JWT인데, 유효기간이 길다..기존처럼 API요청할 때, 기존의 Access Token을 사용하되,
이 토큰이 만료되었을 때만, refresh token을 사용. 그럼 서버에서 또 새로운 Access Token을 발급해주는 방식