-
728x90
서버 기반 인증
기존의 서버 인증 기반의 시스템에서는 서버측에서 유저들의 정보를 기억하고 있어야 했다. 이렇게 세션을 유지하기 위해서는 메모리, 디스크, 데이터베이스 시스템등에 세션을 담고는 했다.
서버 기반 인증 시스템의 흐름은 다음과 같다.
서버 기반의 인증 시스템은 아직도 사용하고 있는 곳이 많기는 하지만, 요즘 웹과 모바일 웹 어플리케이션들이 대세를 이루게 되면서, 이러한 방식의 인증 시스템은 문제를 보이기 시작했다. 예를 들면, 서버를 확장하기가 어려워진 것이다.
서버 기반 인증의 문제점
세션
세션이란, 유저가 인증을 할 때, 이 기록을 서버에 저장하는 것을 뜻한다. 주로 이 세션은 메모리에 저장되기 때문에, 많은 유저가 로그인을 하게 된다면 서버의 램이 과부화가 되게 된다. 대안으로 세션을 데이터베이스의 저장하는 시스템도 있지만, 이 것 또한 유저가 많아지면 데이터베이스 성능에 무리를 줄 수도 있다.
확장성
서버의 트래픽이 많아지면 서버를 확장해야하는데, 세션을 사용하면 분산된 시스템을 설계하는 것이 불가능하지는 않지만 과정이 상당히 복잡해지기 때문에, 서버를 확장하는 것이 어려워진다.
CORS (Cross-Origin Resource Sharing)
웹 어플리케이션에서 세션을 관리할 때 주로 사용되는 쿠키는 단일 도메인 및 서브 도메인에서만 작동하도록 설계 되어있기 때문에 여러 도메인에서 관리하기가 번거롭다.
토큰 기반 인증
HTTP의 통신 원칙은
stateless
이다. 즉, 무상태를 뜻하는데, 토큰 기반 시스템도 stateless이다.상태 유지를 하지 않기 때문에 유저의 인증 정보를 서버나 세션에 담아두지 않는다.
Stateless이고 서버측에 정보를 담지 않는다는 장점 하나만으로 서버 기반 인증으로 인해 발생하는 많은 문제점이 해소된다.
즉, 세션이 존재하지 않으니, 유저들이 로그인 여부와 상관없이 서버를 손쉽게 확장할 수 있게된다.
토큰 플로우
- 유저가 아이디와 비밀번호로 로그인을 한다.
- 서버측에서 해당 계정 정보를 검증한다.
- 계정 정보가 정확하다면, 서버측에서 유저에게 signed 토큰(정상적으로 발급된 토큰임을 증명하는 signautre를 소유)을 발급해준다.
- 클라이언트 측에서 전달받은 토큰을 저장하고, 서버에 요청할 때 마다, 해당 토큰을 함께 서버에 전달한다.
- 서버는 토큰을 검증하고, 요청에 응답한다.
토큰의 장점
보안성(Security)
클라이언트가 서버에 요청을 보낼 때 더 이상 쿠키를 전달하지 않기 때문에 쿠키로 인해 발생하는 취약점들이 사라진다. 하지만 토큰도 취약한 부분이 있기 때문에 조심해야 한다.
확장성(Extensibility)
흔히 말하는 scalability는 서버의 확장을 의미하지만 여기서 말하는 확장성(extensibility)은 로그인 정보가 사용되는 분야의 확장을 의미한다. 토큰을 활용해서 소셜 로그인 같이 다른 서비스에도 권한을 공유할 수 있다.
여러 플랫폼 및 도메인
어플리케이션과 서비스의 규모가 커지게 되면, 여러 디바이스를 호환시키고, 더 많은 종류의 서비스를 제공해야 한다. 이 상황에서 토큰을 사용한다면, 그 어떤 디바이스에서도, 어떤 도메인에서도, 토큰만 유효하다면 요청이 정상적으로 처리된다. 서버측에서 어플리케이션 응답 부분에 다음 헤더만 포함시켜 주면 된다 -
Access-Control-Allow-Origin:
. 이렇게 구성함으로써, assets 파일들(이미지, css, js, html 파일 등)은 모두 CDN에서 제공을 하도록 하고, 서버측에서는 오직 API만 다루도록 설계할 수 있다.웹 표준 기반
- 토큰 기반 인증 시스템의 구현체인 JWT는 웹 표준 RFC 7519에 등록이 되어있는 표준 방법이다.
- 따라서 여러 환경(언어들 - 파이썬, 루비, 자바 등등)에서 지원이 되며, 수 많은 회사에서 사용된다.
Reference
728x90'Developer > Web Development' 카테고리의 다른 글
JWT의 적절한 수명 알아보기 (0) 2021.07.03 댓글