인증(Authentication) : 웹사이트에서 사용자 정보를 입력하여 로그인하는 것
인가(Authorization) : 로그인을 한 뒤 로그인 상태가 유지되도록 권한을 부여하는 것
이때, 로그인 상태를 유지시키는 기술이 세션과 JWT이다.
세션 객체는 클라이언트의 상태 정보를 저장하는데 사용된다. 이 객체는 서버 메모리에 생성되거나 데이터베이스, 분산 캐시 등의 백엔드 스토리지에 저장될 수 있다.
쿠키의 유형에는 영구 쿠키와 세션 쿠키가 있다.
세션을 활용하는 경우 세션 ID를 세션 쿠키에 담아서 통신하기 때문에 세션과 쿠키는 서로 반대되는 개념이 아니라 세션이 쿠키를 사용하는 방식이다.
장점
1. 클라이언트에는 세션 ID만 저장되고 실제 데이터는 서버에 저장되므로 보안성이 높다.
2. 대부분 웹 프레임워크에서 세션 관리를 쉽게 제공하여 서버에서 편리하게 관리할 수 있다.
단점
1. 많은 사용자가 동시에 세션을 유지하면 서버 메모리 사용량이 증가
2. 대규모 시스템에서 서버 간 세션 공유 및 동기화 등 문제로 서버 확장성에 제약
JWT 홈페이지에서 Encode/Decode 해 볼 수 있다.
https://jwt.io/
장점
1. JWT는 클라이언트에 저장되므로 서버에 상태를 저장할 필요가 없어 서버 확장성이 향상
2. 다양한 플랫폼과 언어에서 지원되며 서로 다른 시스템 간에 사용이 용이
단점
1. 토큰 탈취 시 토큰에 포함된 정보가 노출 될 수 있음
2. 매 요청 시 디코딩, 토큰 만료 확인, 재발급 처리 등 추가적인 메커니즘 필요
서버 확장성을 고려했을 때 JWT 방식이 간편하지만 보안에 유의해야한다.
그래서 Access Token과 Refresh Token을 함께 사용하는 방식이 있다.
Refresh Token은 만료시간을 Access Token 보다 길게 하여 DB에 추가로 저장한다.