JWT를 이해하기전에 토큰 기반 인증 시스템에 대해 정리하겠다.
사실 토큰 기반 시스템을 이해하기 전에 이해해야 하는게 하나 더 있었다.
바로 무상태 서버이다.
이 글에 짧게 정리해두긴 했는데 다시 정리해보겠다.
Stateless와 반대되는 개념인 Stateful 서버는 클라이언트로부터 요청이 올 때마다 클라이언트의 상태를 유지하면서 요청을 처리해준다. 이러한 서버의 예시로는 세션을 보관하는 웹서버가 있다. 이때 세션은 Redis, 서버 DB등 다양한 형태로 보관될 수 있다.
반대로 Stateless서버는 상태를 유지하지 않는다. 이러한 시스템의 장점은 위의 글에 정리해두었다.
Application이라 불리는 앱에서는 API Json 통신으로 작동한다. 이러한 상황에서 쿠키기반 인증은 그다지 권장되지 않는다. 따라서 이를 해결하기 위해 토큰인증방식을 사용한다.
가장 대표적인 토큰인증방식이 바로 OAuth이다. 이는 보안상으로 큰 이점이 있다.
과거 서버기반 인증에서는 유저들의 정보를 기억해두고 세션을 보관해두었다. 흐름은 아래 사진과 같다.
이러한 방식의 문제점이 들어나면서 점점 토큰기반으로 변경되게 되었는데 가장 큰 문제점은
토큰기반 시스템에서는 이 세션을 따로 보관해줄 필요가 없다. 요청에 딸려오는 토큰을 보고 그때그때 뜯어서 확인해보면 되는일이기 때문이다.
흐름은 다음과 같다.
1. 로그인을 한다.
2. 계정정보를 검증하고, 정보가 맞다면 signed 토큰을 준다
3. 클라이언트는 이 토큰을 보관하고 있다가 request를 보낼때마다 이를 같이 보낸다
4. 서버에서는 이를 받아서 검증하고 맞다면 응답을 해준다.
5. Profit!
토큰기반 인증은 앞서 세션인증의 단점으로 지적되었던 모든 문제점을 해결한다. 따라서 많이 사용되는 추세이며, 특히 APP 개발에서는 필수적이다.
이 글은 https://velopert.com/2350를 참고하여 작성하였습니다.