세션인증 VS 토큰인증

고태희·2022년 7월 15일
0

CS

목록 보기
20/20

JWT

의미

JWT , JSON Web Token

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

JWT기반 인증은 JWT Token을 HTTP헤더에 실어 서버가 클라이언트를 식별하는 방식이다.

웹서비스에서, 사용자 인증의 가장 대표적인 방식 두가지는 세션방식토근방식이 있다.
JWT는 그 중에서도 토큰방식이다.

이를 사용하는 이유는 HTTP가 stateless한 특성때문인데, 상태를 기억하지 못하기 때문이다.
상태를 기억하지 못한다는 것은 유저가 로그인 했다는 것을 기억하지 못하기 때문에
새 페이지를 요청할 때마다 매번 로그인을 해야한다면 매우 불편할 것이다.

이를 해결하기 위해 나온 대표적인 도구가 바로 세션토큰이다.

세션인증 vs 토큰인증

두가지의 가장 큰 차이점은 다음과 같다.

세션은 DB서버에 저장.
토큰은 클라이언트 측에서만 저장

먼저 세션인증의 동작방식.

  1. 클라이언트가 request를 보내면, 서버에서 세션을 생성&저장
  2. cookie에 session id를 담아서 response
  3. request마다 쿠키 session id전달
  4. 전달받은 쿠키의 sessio정보와 DB에 저장된 session정보 비교하여 response

토큰인증의 동작방식

  1. 클라이언에서 request 보내면, 서버에서 secret key로 토큰 생성
  2. 클라이언트는 발급된 토큰을 저장(보통 local storage에 저장)
  3. 클라이언트에서 request마다 Header에 토큰을 포함시켜 보낸다
  4. 서버는 토큰의 signature를 서버측 secret key로 풀어 user정보 확인

두가지 방식의 특징 비교

최근 대부분 웹서비스가 토큰방식을 선택하게 되는 이유는 확장성에 있다

세션은 서버에 저장되기 때문에 한번에 많은 다중 접속자 발생 시 과부하가 걸릴 수도있다

이를 해결하기 위해 Scale-Up / Scale-Out같은 방식을 사용할 수 있지만,
Scale-Up은 비용의 문제, Scale-Out으로 서버를 여러대두면 세션을 쓰기가 또 복잡해진다.

이러한 세션의 단점으로 sticky session / session clustering과 같은 방식도 등장했지만, 이것도 처리비용이 발생하므로,
애초에 이런걱정을 안해도 되는 토큰을 사용

하지만, 토큰은 세션에 비해 보안측면에서 상대적으로 취약하다. 이를 해결하기 위해 나온것이 Refresh Token

Refresh Token은 기존 토큰과 동일한 형태의 JWT인데, 유효기간이 길다..기존처럼 API요청할 때, 기존의 Access Token을 사용하되,
이 토큰이 만료되었을 때만, refresh token을 사용. 그럼 서버에서 또 새로운 Access Token을 발급해주는 방식

0개의 댓글