토큰 기반 인증

강한친구·2022년 8월 16일
0

JWT를 이해하기전에 토큰 기반 인증 시스템에 대해 정리하겠다.

Stateless 서버

사실 토큰 기반 시스템을 이해하기 전에 이해해야 하는게 하나 더 있었다.
바로 무상태 서버이다.

이 글에 짧게 정리해두긴 했는데 다시 정리해보겠다.

Stateless와 반대되는 개념인 Stateful 서버는 클라이언트로부터 요청이 올 때마다 클라이언트의 상태를 유지하면서 요청을 처리해준다. 이러한 서버의 예시로는 세션을 보관하는 웹서버가 있다. 이때 세션은 Redis, 서버 DB등 다양한 형태로 보관될 수 있다.

반대로 Stateless서버는 상태를 유지하지 않는다. 이러한 시스템의 장점은 위의 글에 정리해두었다.

토큰인증을 어디에 쓰는가

Application이라 불리는 앱에서는 API Json 통신으로 작동한다. 이러한 상황에서 쿠키기반 인증은 그다지 권장되지 않는다. 따라서 이를 해결하기 위해 토큰인증방식을 사용한다.

가장 대표적인 토큰인증방식이 바로 OAuth이다. 이는 보안상으로 큰 이점이 있다.

왜 토큰기반 인증을 쓰게 되었는가

서버 기반 인증

과거 서버기반 인증에서는 유저들의 정보를 기억해두고 세션을 보관해두었다. 흐름은 아래 사진과 같다.

이러한 방식의 문제점이 들어나면서 점점 토큰기반으로 변경되게 되었는데 가장 큰 문제점은

  1. 세션유지에 필요한 비용
    • 세션은 메모리에 저장되어야한다. 따라서 유저가 늘어날 수록 메모리용량이 부족하게 된다.
    • 물론 이를 방지하려고 DB에 저장하거나 할 수 있지만, 이 또한 DB에 부담이 된다.
  2. 확장성 문제
    • 서버를 쉽게 확장하거나 수정하지 못하게 된다.
  3. CORS 세션은 단일 도메인에서 작동하는걸 전재로 한다. 따라서 여러 도메인에서는 작동하지 않는다.

토큰 기반 인증

토큰기반 시스템에서는 이 세션을 따로 보관해줄 필요가 없다. 요청에 딸려오는 토큰을 보고 그때그때 뜯어서 확인해보면 되는일이기 때문이다.

흐름은 다음과 같다.
1. 로그인을 한다.
2. 계정정보를 검증하고, 정보가 맞다면 signed 토큰을 준다
3. 클라이언트는 이 토큰을 보관하고 있다가 request를 보낼때마다 이를 같이 보낸다
4. 서버에서는 이를 받아서 검증하고 맞다면 응답을 해준다.
5. Profit!

토큰기반 인증은 앞서 세션인증의 단점으로 지적되었던 모든 문제점을 해결한다. 따라서 많이 사용되는 추세이며, 특히 APP 개발에서는 필수적이다.

이 글은 https://velopert.com/2350를 참고하여 작성하였습니다.

0개의 댓글