세션이란 사용자가 인증에 성공한 상태를 말하고,
토큰이란 교통승차권과 같이, 무언가를 이용할 수 있는 권한이나 자격을 나타내는 징표입니다
토큰 기반 인증방식은 세션 기반 인증이 가지고 있던 한계를 극복하고자 만들어졌습니다.
세션 기반인증은 서버에서 유저의 상태를 관리합니다. 그래서 개발자들은 서버의 부담을 줄이기 위해서, 서버에 사용자의 인증상태를 저장하는 것이 아닌 클라이언트에 이를 저장하는 방법을 고안하였고, 그게 바로 토큰입니다.
세션 기반 인증방식
먼저, 토큰 기반 인증방식이 생겨난 배경인, 세션 기반 인증에 대한 간단하게 알아볼까요?
1. 유저가 인증정보를 담아 서버에 로그인 요청을 보냅니다
2. 서버는 데이터베이스에 저장된 유저의 인증정보를 확인합니다
3. 인증에 성공했다면, 해당 유저에 대한 세션을 생성하고, 이를 서버 메모리에 저장합니다
4. 쿠키(매개체)를 통해 해당 유저의 세션 id를 클라이언트에 전달합니다
5. 클라이언트에 세션 id가 저장됩니다
6. 클라이언트에서 서버로 리소스를 요청 할때, 쿠키(매개체)에 세션 id가 함께 전달됩니다 (GET/someinfo)
7. 서버는 전달받은 세션 id를 토대로 유저의 세션 데이터를 조회합니다
8. 세션이 유효하다면, 유저의 요청에 대한 응답 데이터를 전송합니다
앞서 살펴보았듯이, 세션 방식의 한계점은 서버가 유저의 상태를 관리하여 서버의 부담이 커진다는 것입니다
따라서, 유저의 세션 데이터는 하나의 서버에 저장되기 때문에, 하나의 서버가 아닌 다수의 서버가 사용된다면?
서버 간 데이터 공유가 필요합니다. 또는, sticky sever를 통해 특정 유저는 특정 서버에 연결될 수 있도록 지정해야 합니다
서버의 부담을 줄일 수 있는 인증방식은 없을까?
이에 대한 인증방식으로 토큰이 등장하게 되었습니다.
토큰 기반 인증방식
토큰 기반 인증방식은 서버에서 유저의 인증상태를 저장할 필요없이 클라이언트에 이를 저장할 수 있어, 서버의 과부하나 메모리 부족 문제를 줄일 수 있습니다.
토큰은 교통승차권과 같이, 무언가를 이용할 수 있는 권한이나 자격을 나타내는 징표입니다. 웹 보안에서의 토큰은 인증, 권한 정보를 담고 있는 암호화된 문자열 입니다. 이를 통해 특정 어플리케이션을 이용할 수 있는 유저의 접근권한을 부여할 수 있습니다!
1. 유저가 인증정보를 담아 서버에 로그인 요청을 보냅니다
2. 서버는 데이터베이스에 저장된 유저의 인증정보를 확인합니다
3. 인증에 성공했다면, 서버는 유저에 대한 권한정보를 서버의 비밀키와 함께 토큰을 생성합니다
4. 서버는 Authorization 헤더에 토큰을 담아 클라이언트에 전달합니다
5. 클라이언트는 전달받은 토큰을 브라우저의 세션 스토리지 or 로컬스토리지 에 저장합니다
6. 클라이언트가 서버로 리소스를 요청할때, Authorization 헤더를 통해 토큰이 함께 전달됩니다
7. 서버는 전달받은 토큰을 서버의 비밀키로 검증합니다 이를 통해, 토큰이 위조되었는지 토큰의 유효기간이 지나지 않았는지 등을 확인할 수 있습니다
8. 토큰이 유효하다면, 유저의 요청에 대한 응답 데이터를 전송합니다
토큰 인증방식의 장점은 서버가 아닌 클라이언트에서 유저의 인증정보를 관리한다는 것입니다
클라이언트가 토큰을 통해 유저의 인증상태를 가지고 있는 것이죠!
(1) 무상태성
- 서버에서 유저의 상태를 관리하지 않음
- 서버는 토큰의 유효성만 검증
토큰 인증방식은 세션 인증방식과 달리, 서버가 유저의 인증상태를 기억하고 있을 필요가 없어서 서버는 서버가 가지고 있는 비밀키를 통해 토큰의 유효성만 검증하면 됩니다. 따라서 서버는 무상태적인 아키텍쳐를 구축할 수 있습니다
(2) 확장성
- 하나의 토큰으로 다수의 서버에 인증가능
다수의 서버에 공통의 세션 데이터를 가질 필요가 없는 것도 토큰 기반 인증방식의 장점입니다
(3) 어디서나 토큰 생성 가능
- 토큰 생성만을 담당하는 인증용 서버를 만들 수 있음
- 여러 앱을 하나의 토큰으로 인증하는 등 다양한 활용 가능
토큰 생성과 검증이 하나의 서버에서 이루어지지 않아도 되기 때문에 토큰 생성만을 담당하는 서버를 구축할 수도 있습니다
이를 잘 활용하면 여러 서비스 간의 공통된 인증서버를 구현할 수도 있습니다
(4) 권한 부여에 용이
- 사용자의 인증정보 뿐만 아니라 권한정보도 담아 암호화 가능
접근 권한 등 다양한 정보를 유연하게 담을 수 있기 때문에,
사용자에 admin 권한을 부여하거나 사용자의 사진 및 연락처와 같은 리소스 접근 범위(스코프)를 설정할 수 있습니다
'Web system' 카테고리의 다른 글
json server 명령어 (0) | 2023.06.23 |
---|---|
토큰기반 인증방식과 보완기술 : JWT, 액세스 토큰, 리프레시 토큰 (0) | 2023.06.17 |
HTTPS 암호화방식 (0) | 2023.05.03 |
네트워크 계층모델 (OSI 7계층 모델, TCP/IP 4계층 모델) (0) | 2023.05.01 |
네트워크 심화(IP 패킷이란, TCP와 UDP 비교) (0) | 2023.05.01 |