프론트엔드
세션 기반 인증과 토큰 기반 인증의 차이
학습하는 청년
2024. 6. 15. 11:12
최종 수정 : 2024-06-15
서버(세션) 기반 인증
서버 측에서 사용자의 정보를 세션에 저장하여 기억하는 방식으로 메모리, 디스크, 데이터베이스 등을 통해 관리를 한다. ㅇ예를 들어, 로그인을 하면 세션에 사용자 정보를 저장하고 사용자 정보가 필요한 서버를 제공할 때 사용하곤 하는 방식이며, 이를 Statfull 서버라 한다.
서버(세션) 기반 인증은 세션(session)과 쿠키(Cookie)가 사용되며 아래와 같은 인증 절차가 진행된다.
# 장점
- 서버에서 세션정보가 관리되므로 상대적으로 안전하다.
- 서버에 세션정보가 있기 때문에 상태 여부를 확인하기 수월하다.
# 단점
- 서버 확정서의 어려움이 있다.
- 메모리 / 데이터베이스의 과부화로 성능에 영향을 준다.
토큰 기반 인증
서버는 인증받은 사용자에게 톸는을 발급, 클라이언트에서는 이 토큰을 저장하여 서버로 서비스 요청 시 헤더에 토큰을 실어 보내 유효성 검사를 하는 인증 방식이다. 서버에 클라이언트 정보를 저장하지 않으므로 Stateless 서버라 한다.
토큰 생성 및 인증 절차는 다음과 같다.
# 장점
- 서버에 저장되지 않아 메모리 / 데이터베이스 성능에 양향이 적고 서버 확장에 용이하다.
- 토큰을 이용하여 로그인 정보가 다른 분야로 확장하여 이용할 수 있도록 하는 데 용이하다.
(ex. Google, Fackbook 등등의 계정으로 로그인 처리) - 여러 플랫폼 및 도메인에서 토큰을 이용한 검증이 가능하여, 여러 디바이스나 도메인에서 인증이 가능하다.
# 단점
- 토큰의 길이가 길어져 네트워크 대욕폭에 대한 낭비가 존재한다.
- 토큰 발생 시 사용되는 Signature 정보만 맞으면 맞는 토큰으로 인식하기에 한번 발급된 토큰의 정보를 바꾸는 게 불가능하다.
- 단순 Base64로만 인코딩되기 때문에 토큰이 불법적으로 취득되면 사용자 정보가 노출된 가능성이 있다.
--> 그러나, 이를 보완하는 방법으로 JWE 방식을 통해 토큰 자체를 암화할 수 있다.
참고 자료
https://m.blog.naver.com/kevinjjun/222505335357