오늘은 웹서비스에 필수적인 개념 토큰 인증에 대한 개념을 알아보자! 🤲
우선 인증과 인가는 무엇을 말하는 것일까 ?
이전에 한번 정리한 적이 있어 간단히 얘기하면
(인증과 인가)
그렇다면 이제 인증 방식에 대해 알아보자
토근 기반 인증이 없었을 때의 인증 시스템은 서버 측에서 유저들의 정보를 기억하고 있어야 했다
서버 기반 인증 시스템의 흐름을 보자면 다음과 같다.
세션
이라고 한다. 대부분의 경우 메모리에 저장하는데, 유저의 수가 급격히 늘어난다면 서버의 램이 과부화된다.stateless
하다. 즉 상태유지를 하지 않는다. 이 시스템에서는 더 이상 유저의 정보를 서버나 세션에 담아두지 않는다. 이 개념만으로 위에서 서술한 서버 기반 인증 방식의 많은 문제점이 해소된다.
- 서버측 메모리 과부화 해소
- 세션이 존재하지 않으니 유저들이 로그인 되어있는 지 신경 쓰지 않으면서 서버를 손쉽게 확장
토큰 기반 시스템의 구현 방식은 시스템마다 크고작은 차이가 있겠지만, 대략적으로 보면 다음과 같다.
웹서버에서 토큰을 서버에 전달 할 때에는, HTTP 요청의 헤더에 토큰값을 포함시켜서 전달합니다.
만약에 세션을 서버 측에서 저장하고 있고 서버를 여러대를 사용하여 요청을 분산하였다면 어떤 유저가 로그인 시 처음 로그인했던 그 서버에만 요청을 보내도록 설정을 해야한다. 하지만 토큰은 이 문제를 해결한다.
클라이언트가 서버에 요청을 보낼 때 더 이상 쿠키글 전달하지 않음으로 쿠키를 사용함으로서 인해 발생하는 취약점이 사라진다.
(하지만 토큰을 사용하는 환경에서도 취약점이 존재한다)
Extensibility 는 로그인 정보가 사용되는 분야를 확장하는것을 의미. 토큰을 사용하여 다른 서비스에서도 권한을 공유 할 수 있다.
예를 들어서, 스타트업 구인구직 웹서비스인 로켓펀치에서는 Facebook, LinkedIn, GitHub, Google 계정으로 로그인을 할 수 있다.
1) Stateless vs Stateful Servers